2

假设我有一个子函数:

function Child() {}

并有一个父函数:

function Parent() {}

然后我将 Child 的原型设置为 Parent 的新实例:

Child.prototype = new Parent()

困惑是每次我创建新的 Child 实例时

var c = new Child()

是否会再次创建父级?

4

1 回答 1

1

它只创建一次。每次调用都会创建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.getPrototypeOfc1_ 此外,' 和'都指向同一个对象实例,表明两者和共享同一个对象。c2prototypec1c2aParentPropc1c2Parentprototype

于 2013-07-08T02:34:44.267 回答