假设我有一个子函数:
function Child() {}
并且有一个父函数:
function Parent() {}
然后我将Child的原型设置为Parent的一个新实例:
Child.prototype = new Parent()
每当我创建一个新的Child 实例时,就会出现混乱
var c = new Child()
是否会再次创建父级?
它只创建一次。每次调用new Child()
时,都会创建一个新的Child
对象,并将同一个Parent
对象设置为其原型。您可以通过执行以下操作(jsfiddle)来确认这一点:
function Child() {}
function Parent() {
this.aParentProp = { name : "Parent" };
}
Child.prototype = new Parent();
var c1 = new Child();
var c2 = new Child();
if(Object.getPrototypeOf(c1) === Object.getPrototypeOf(c2)) {
alert("same prototype!");
}
if(c1.aParentProp === c2.aParentProp) {
alert("same property!");
}
使用Object.getPrototypeOf,c1
和c2
都具有相同的prototype
。此外,c1
和c2
的aParentProp
都指向相同的对象实例,这表明c1
和c2
共享其prototype
的相同Parent
对象。