Задание конструктора по наследованию прототипа - PullRequest
3 голосов
/ 29 февраля 2012

При создании наследования прототипа его просят отослать конструктор ребенка обратно к себе ниже,

A = function() {} 
B = function() {} 
B.prototype = new A;
B.prototype.constructor = B;

Что бы иметь неблагоприятные последствия, если нет?

EDIT

  • Как объяснили @GGG & @CMS, выравнивание конструктора не занимает влияет на создание дочернего объекта new Child(...), но необходимо правильно отразить конструктор дочернего объекта позже.
  • @GGG также предложил защитную альтернативу для расширения прототип цепи. Пока Child.prototype = new Parent(...) включает в себя свойства родителя для потомка, Child.prototype = Object.create(Parent.prototype) нет.

1 Ответ

6 голосов
/ 29 февраля 2012

Во-первых, пожалуйста, не делайте этого:

B.prototype = new A;

Сделайте это вместо ( шим Object.create для старых браузеров):

B.prototype = Object.create(A.prototype);

Что касается constructor, ничего не сломается, если вы этого не сделаете, но если вы этого не сделаете:

A = function() {};
var a = new A();
console.log(a.constructor); // A

B = function() {};
var b = new B();
console.log(b.constructor); // A (!)

... установка свойства constructor прототипа обратно в фактическую функцию конструктора позволяет вам сделать это:

B.prototype.constructor = B;
var b = new B();
console.log(b.constructor); // B
...