澄清JavaScript原型

时间:2013-07-08 02:25:47

标签: javascript prototype language-concepts

假设我有一个子功能:

function Child() {}

并拥有父功能:

function Parent() {}

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

Child.prototype = new Parent()

每次我创建一个Child

的新实例时都会产生混淆
var c = new Child()

是否会再次创建父母?

1 个答案:

答案 0 :(得分: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!");
}

c1c2使用Object.getPrototypeOf具有相同的prototype。此外,c1c2的{​​{1}}指向同一个对象实例,表明aParentPropc1共享同一个{{1}对象为c2