muistooshort 및 maris의 설명에 따르면, 배열은 참조 유형이기 때문에 클래스 속성처럼 작동합니다. 이 배열은 모델 인스턴스간에 실제로 공유되지만, 이것은 백본을 사용하여 클래스 변수를 만드는 의도 된 방식이 아니라 자바 스크립트의 특징입니다.
반면 정수는 부울 및 문자열과 함께 기본 유형이며 javascript는 이러한 유형에 대한 참조를 전달하지 않고 대신 복사합니다.
배열, 객체 및 함수는 참조 유형이며 정수, 부울 값, null 및 undefined는 값 유형입니다. 당신은 여기에 대해 자세히 알아볼 수 있습니다 : http://docstore.mik.ua/orelly/webprog/jscript/ch04_04.htm
당신은 클래스 속성의 사용을 확인하려면 백본 문서의 다음이 부분은 관련이 : http://backbonejs.org/#Model-extend
extendBackbone.Model.extend (속성, [classProperties ])
자신 만의 Model 클래스를 만들려면 Backbone.Model을 확장하고 인스턴스 속성뿐만 아니라 선택적 classProperties를 제공하여 생성자 함수에 직접 첨부해야합니다.
이 코드 여기 https://jsfiddle.net/zn6bu4uf/3/ 당신의 jsfiddle을 갈래했습니다
var myModel = Backbone.Model.extend({}, {foo: 0})
console.log(myModel.foo); // 0
myModel.foo++;
console.log(myModel.foo); // 1
var test1 = new myModel();
var test2 = new myModel();
test1.constructor.foo++;
test1.constructor.foo++;
test2.constructor.foo++;
console.log(test1.constructor.foo) // 4
console.log(test2.constructor.foo) // 4
난 당신이 잘못된 "클래스 변수"용어에 정신이되는 것 같아요. 실제 문제는 프로토 타입의 배열에서'push'를 호출하면 그 자리에서 배열을 수정하지만 프로토 타입의 숫자에 '++'를 사용하면 프로토 타입에서 벗어납니다 (즉, 새로운 값을 인스턴스에 복사하지 않고 프로토 타입의 값). –
@muistooshort 네 말이 맞아, 고마워. 배열이 클래스 변수로 작동하는 것처럼 보이지만 이는 객체이고 자바 스크립트는 객체를 복사하는 대신 객체에 대한 참조를 사용하기 때문입니다. 따라서 실제로는 클래스간에 공유되지만 의도적으로는 공유되지 않습니다. 나는 그것을 반영하기 위해 나의 대답을 편집 할 것이다. –
더 정확한 것은 부울, int는 값 유형이고 object와 array는 참조 유형입니다. – Maris