코드에 몇 가지 문제가 있습니다.
function Foo() {
this.Bar = Bar;
// etc..
}
var Bar = {
__words : {},
addWord : function (word, amount) {
this.__words[word] = amount;
}
// etc..
}
바 푸 전에 정의되어야하지만, 변수가 실제로이 특정 예에서 문제가되지 않을 수도 기능 범위 수준에서 정의되어 있기 때문에 문제없이 작동 할 수 있습니다.
즉, Foo 생성자 내에서 객체를 복사한다고합니다. 객체는 변경 가능하므로 작동하지 않습니다. 객체를 한 번 변경하면 다른 객체가 변경됩니다. 당신이 할 수있는 일은 이것입니다. 새로운 것을하지 않고 할 수있는 다른 방법이 있습니다.
var Bar = {
create: function() {
var obj = Object.create(this);
obj.__words= {};
return obj;
},
addWord: function (word, amount) {
this.__words[word] = amount;
}
...other methods...
};
var Foo = function() {
this.Bar = Bar.create();
// etc..
};
다른 브라우저에서는 Object.create
이 어떻게 지원되는지 잘 모릅니다. 이 구문은 Felix가 작성한 것과 동일하므로 명확하게 두 객체의 필요성을 제거 할 수 있습니다.
유일한 차이점은 새로운 Bar()를 작성하는 것입니다. 실제로 프로토 타입 개체를 만들고 프로토 타입에서 개체를 만드는 중입니다. create는 생성자입니다.
같은 방법으로 Foo를 작성하면 다음과 같은 결과를 얻을 수 있습니다.
var Bar = {
create: function() {
var obj = Object.create(this);
obj.__words= {};
return obj;
},
addWord: function (word, amount) {
this.__words[word] = amount;
},
...other methods...
};
var Foo = {
create: function() {
var foo = Object.create(this);
foo.Bar = Bar.create();
return foo;
},
....
};
var foo1 = Foo.create();
var foo2 = Foo.create();
foo1.bar.addWord("allo", 3);
나는 모든 것이 당신이 그러나 "새로운"통신 사업자를 통해 몇 가지 장점 등의 방법을 만들려고하는지에 따라 달라집니다 같아요. 예를 들어 객체 생성 후에 콜백을 실행하는 비동기 메서드를 만들 수 있습니다.
자세한 내용은 여기를 참조하십시오. 결국 그것은 거의 똑같습니다.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create
콘솔 로그? 내 생각에,'var Bar'는 클래스 정의 이전에 있어야합니다. – karthikr
객체가 참조로 전달 되었기 때문에'this.Bar = clone (Bar) '와 같은 새로운 인스턴스마다 복제해야합니다. – elclanrs
@elclanrs : 'clone()'이라고 써야합니다. – SLaks