"각 obj가 서로에 종속되게 만들려고했습니다."
Kyle이 설명하는 것처럼 두 개체가 [[Prototype]]연결될 때 실제로 서로 의존하지 않습니다. 대신 그들은 개별 개체입니다. [[Prototype]]언제든지 변경할 수 있는 연결을 사용하여 한 개체를 다른 개체에 연결합니다 . OLOO 스타일로 생성 된 두 개의 [[Prototype]]연결된 객체를 서로 의존하는 것으로 간주한다면 호출을 통해 생성 된 객체에 대해서도 동일하게 생각해야 constructor합니다.
var foo= {},
bar= Object.create(foo),
baz= Object.create(bar);
console.log(Object.getPrototypeOf(foo)) //Object.prototype
console.log(Object.getPrototypeOf(bar)) //foo
console.log(Object.getPrototypeOf(baz)) //bar
지금 당신은 생각하지 잠시 생각 foo bar하고baz 각 - 기타에 의존로?
이제이 constructor스타일 코드를 똑같이 해봅시다 .
function Foo() {}
function Bar() {}
function Baz() {}
Bar.prototype= Object.create(Foo);
Baz.prototype= Object.create(Bar);
var foo= new Foo(),
bar= new Bar().
baz= new Baz();
console.log(Object.getPrototypeOf(foo)) //Foo.prototype
console.log(Object.getPrototypeOf(Foo.prototype)) //Object.prototype
console.log(Object.getPrototypeOf(bar)) //Bar.prototype
console.log(Object.getPrototypeOf(Bar.prototype)) //Foo.prototype
console.log(Object.getPrototypeOf(baz)) //Baz.prototype
console.log(Object.getPrototypeOf(Baz.prototype)) //Bar.prototype
유일한 차이 B / 후자와 전자의 코드는 후자의 것이 w는
foo, bar, bazbbjects 그들의 임의의 물체들 - 각각 서로 연결되어있다 constructor(함수 Foo.prototype, Bar.prototype,Baz.prototype )하지만 전 하나 (에 OLOO가 직접 링크되는 스타일). 당신은 그냥 연결하고 두 가지 방법 foo, bar, baz직접 전 하나에 간접적으로 후자에 서로. 그러나 두 경우 모두 객체는 인스턴스화되면 다른 클래스에서 상속 할 수없는 클래스의 인스턴스와 같지 않기 때문에 서로 독립적입니다. 객체가 위임해야하는 객체도 언제든지 변경할 수 있습니다.
var anotherObj= {};
Object.setPrototypeOf(foo, anotherObj);
그래서 그들은 모두 서로 독립적입니다.
" OLOO각 물체가 서로에 대해 전혀 모르는 문제가 해결 되기를 바랐습니다 ."
네 가능합니다-
Tech유틸리티 객체로 사용합시다-
var Tech= {
tag: "technology",
setName= function(name) {
this.name= name;
}
}
당신이 연결 원하는대로 많은 개체로 만들 Tech-
var html= Object.create(Tech),
css= Object.create(Tech),
js= Object.create(Tech);
Some checking (avoiding console.log)-
html.isPrototypeOf(css); //false
html.isPrototypeOf(js); //false
css.isPrototypeOf(html); //false
css.isPrototypeOf(js); //false
js.isPrototypeOf(html); //false
js.isPrototypwOf(css); //false
Tech.isPrototypeOf(html); //true
Tech.isPrototypeOf(css); //true
Tech.isPrototypeOf(js); //true
당신은 생각하십니까 html, css, js객체가 각 - 기타에 연결되어 있습니까? 아니요, 그렇지 않습니다. 이제 우리가 constructor함수로 어떻게 할 수 있었는지 봅시다.
function Tech() { }
Tech.prototype.tag= "technology";
Tech.prototype.setName= function(name) {
this.name= name;
}
당신이 연결 원하는대로 많은 개체로 만들 Tech.proptotype-
var html= new Tech(),
css= new Tech(),
js= new Tech();
일부 검사 (console.log 방지)-
html.isPrototypeOf(css); //false
html.isPrototypeOf(js); //false
css.isPrototypeOf(html); //false
css.isPrototypeOf(js); //false
js.isPrototypeOf(html); //false
js.isPrototypeOf(css); //false
Tech.prototype.isPrototypeOf(html); //true
Tech.prototype.isPrototypeOf(css); //true
Tech.prototype.isPrototypeOf(js); //true
어떻게 이런 생각하십니까 constructor스타일 개체 ( html, css, js) 객체는 다를 OLOO스타일 코드? 사실 그들은 같은 목적을 가지고 있습니다. OLOO-style 에서는 하나의 객체가 위임 Tech(명시 적으로 위임이 설정 됨)하는 반면, constructor스타일에서는 하나의 객체가 위임 Tech.prototype(암시 적으로 위임 됨)에 위임됩니다 . 궁극적 OLOO으로 constructor-style을 사용하여 간접적으로 -style을 사용하여 서로 연결되지 않은 세 개체를 하나의 개체에 연결 합니다.
"그대로 ObjB는 ObjA .. Object.create (ObjB) 등에서 생성되어야합니다."
아니요, ObjB여기는 어떤 클래스의 인스턴스 (고전 기반 언어)와 다릅니다
ObjA. 생성 시점 에 객체 가 객체에 위임 된 것처럼 말입니다objBObjA . 생성자를 사용했다면 .prototypes 를 사용하여 간접적으로도 동일한 '커플 링'을 수행했을 것 입니다.