2017-05-09 7 views
-3

왜 Angular2가 JSON.stringify를 대체합니까?!Angular2 JSON.stringify

내 자신의 Date.toJSON을 재정의했으나 객체를 문자열화할 때 호출되지 않았습니다.

다음 예에서는 제대로 작동하지만 각도 앱에서는 작동하지 않습니다!

<html> 
 
    
 
    <body> 
 
    
 
    Custom Date Fomat : <span id="date1"></span><br> 
 
    ISO Date Format : <span id="date2"></span> 
 
    
 
    </body> 
 
    
 
    <script> 
 
    Date.prototype.toJSON = function(){ 
 
     var day = date.getDate(); 
 
     var month = date.getMonth() + 1; 
 
     var year = date.getFullYear(); 
 

 
     var s = year + "-" + 
 
     (month > 9 ? "" : "0") + month + "-" + 
 
     (day > 9 ? "" : "0") + day + "T00:00:00.000Z"; 
 

 
     return s; 
 
    } 
 
    
 
    var date = new Date(); 
 
    document.getElementById("date1").innerHTML = JSON.stringify({date}); 
 
    document.getElementById("date2").innerHTML = date.toISOString(); 
 
    
 
    </script> 
 

 
</html>

+0

angular2에서 무엇을 했습니까? 그것도 공유하십시오. –

+0

'Date.toJSON()'함수를 어디에 호출하는지 알지 못합니다. 나는 당신이'JSON.stringify()'와'date.toISOString()'을 사용하는 곳을 본다. – birwin

+0

JSON.stringify는 Date.toJSON()을 호출해야합니다. 맞습니다! – user2638209

답변

2

JSON.stringify은 객체의 자신의 속성입니다 속성을 복사 만합니다 - 객체의 '최상위'속성을 즉. 프로토 타입 상속을 사용하여 복잡한 javascript 객체를 사용하는 경우 프로토 타입 체인의 속성을 복사하지 않습니다.

기본적으로 (함수 생성자로 생성 된) 특정 유형의 객체를 다루는 경우 JSON.stringify가 예상 한대로 수행 할 것이라고 신뢰할 수 없습니다. JSON 사양은 JSON.stringify가 사용할 자체 .toJson() 메서드를 제공하기 위해 이와 같은 사용자 지정 개체를 허용합니다. 그러나 모든 도서관 공급 업체 (또는 브라우저 공급 업체)가이 기능을 제공하지는 않습니다.

다행히도이 해결 방법은 매우 간단합니다. 객체를 수신하자마자 자신의 .toJson() 메소드를 제공/첨부하거나 객체의 속성을 pojo (일반 오래된 자바 스크립트 객체)에 '복사'할 수 있습니다. 일단 pojo를 다루면 JSON.stringify가 멋지게 작동합니다. 그러나 개체의 모든 자식 속성이 네이티브 데이터 형식 또는 pojos로 복사되도록주의하십시오.