2012-02-28 2 views
3

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

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) - нет.
+4

См: [почему перечисляя фактический конструктор класса в JavaScript важно] (HTTP://stackoverflow.com/questions/7719119) – CMS

ответ

6

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

B.prototype = new A; 

ли это вместо (shimObject.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 
Смежные вопросы