Уточнение прототипов JavaScript

Предположим, у меня есть дочерняя функция:

function Child() {}

и иметь родительскую функцию:

function Parent() {}

затем я устанавливаю прототип Child в новый экземпляр Parent:

Child.prototype = new Parent()

путаница каждый раз, когда я создаю новый экземпляр Child

var c = new Child()

Будет ли Родитель создан снова?


person hh54188    schedule 08.07.2013    source источник
comment
возможный дубликат Запутался в прототипном наследовании JavaScript   -  person    schedule 08.07.2013
comment
Нет, Parent больше не создается. Он создается один раз, когда вызывается new Parent(), чтобы установить Child.prototype.   -  person    schedule 08.07.2013


Ответы (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!");
}

И c1, и c2 имеют одинаковый prototype с использованием Object. получитьпрототип. Кроме того, как c1, так и c2 aParentProp указывают на один и тот же экземпляр объекта, показывая, что и c1, и c2 используют один и тот же объект Parent для своих prototype.

person go-oleg    schedule 08.07.2013