2014-04-05 3 views
0

JS 배열 프로토 타입에 "max"필드를 추가했습니다. 배열을 문자열로 할 때이 추가 사항을 보는 데 문제가 있습니다. toJSON 함수를 덮어 쓰려고했지만 아무 쓸모가 없습니다.JS 배열에 필드 추가

Array.prototype.max = 0; 
Array.prototype.toJSON = function(){ 
    var o = this; 
    o.max = this.max; 
    return o; 
}; 

var a = [1,2,3]; 
a.max = 10; 

console.log(JSON.stringify(a)); 
//'[1,2,3]' 
내가 같은 일을 방지하기 위해 싶습니다

{array_field을 A, max_field : 최대} 그냥 배열 개체를 사용 -이 가능합니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

개체와는 달리 그것은 아니에요 당신이 뭘 하려는지 명확? 'prototype'이 무엇인지,'Array' 생성자는 무엇인지 알고 있습니까? – adeneo

+0

http://jsfiddle.net/adeneo/nXHmh/ – adeneo

+0

예. 배열에 대한 추가 필드가 필요합니다. 이 서버에서 의도 한대로 작동하지만 배열 "문자열"및 클라이언트에 보낼 때 내 추가 필드는 제외됩니다. – user3273906

답변

1

여기에 몇 가지 옵션이 있습니다. 원하는 옵션을 선택할 수있는 옵션은 없습니다.

JSON 배열은 정수형 키 [1]로만 제한되므로, max 값을 직접 전송할 수 없습니다.

당신의 선택은 다음과 같습니다

  • array 대신 object 사용. 배열 마법을 모두 풀었지만 더 잘 작동 할 것입니다.
  • max 및 배열 값이 모두 포함 된 구성 개체와 같이 배열 외부에 메타 데이터를 보냅니다.
  • 배열을 보내기 전에 길이를 max으로 오랫동안 강요하십시오. JSON은 사용되지 않는 배열 요소를 null으로 인코딩합니다.
  • 맞춤식 직렬/병렬 변환기를 사용하십시오. JSONS + 엑스트라에 코드를 추가 할 수도 있습니다. 실제로 이것은 두 번째 옵션과 거의 동일합니다.

[1] 자바 스크립트

+0

실망 스럽습니다. 객체에 배열을 래핑 할 것입니다. – user3273906