나는 여러 번 instanciate 자바 스크립트 "클래스"가 있습니다. 제 문제는 인스턴스에서 속성을 수정하면 실제로 "클래스"의 속성이 수정되므로 더 이상 인스턴스가 원하는 방식으로 초기화되지 않습니다. 여기 무슨 일의 단순화 된 조각이다, 원래의 코드는 BackboneJS를 사용하고 있지만 내 경우 설명하기에 충분하다 : 나는 "새로운"키워드가 브랜드를 만들 것이라고 생각"class"속성에 대한 참조를 만드는 자바 스크립트 "new"키워드
var foo = function() {
this.defaults.id = 1;
};
// This is my property
foo.prototype.defaults = {
id: 0,
};
console.log(foo.prototype.defaults); // => {id: 0}
var bar = new foo();
console.log(foo.prototype.defaults); // => {id: 1}
을 새로운 객체이지만 프로토 타입 속성에 대한 참조를 만드는 것처럼 보입니다. 가장 좋은 옵션은 생성자 내부에서 모든 속성을 복제하는 것입니다 ...
깨끗한 "클래스 속성"동작을 달성하기위한 깨끗한 방법이 있습니까?
미리 감사드립니다.
로맹.
편집 : SO 코드 조각에서 작동하지 않습니다 ... 원하는 경우 콘솔에 복사하여 붙여 넣기 만하면됩니다.
'new'는 실제로 새로운 인스턴스를 생성하지만 인스턴스 **는 모든 인스턴스에서 공유되는 프로토 타입에 ** 점을 만듭니다. 포인터를 할당하면 값을 복사 할 필요가 없습니다. 따라서'defaults'가 공유된다면 그 속성을 수정하는 것도 공유됩니다. –