2012-02-28 42 views
3

當製作原型繼承,它的要求是指孩子的構造函數回到低於本身,構造分配

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

如果沒有什麼會採取不利的影響?

編輯

  • 作爲@GGG & @CMS已經解釋,構造排列呈現由new Child(...)創建子對象沒有 效果,但以後需要以正確反映子對象的構造 。
  • @GGG還提出了一個防禦性替代方案來延伸 原型鏈。 Child.prototype = new Parent(...) 包括家長的孩子的屬性,Child.prototype = Object.create(Parent.prototype)不包括。
+4

參見:爲什麼上市一類的實際構造在JavaScript重要(HTTP:/ /stackoverflow.com/questions/7719119) – CMS 2012-02-28 20:25:22

回答

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