JavaScript 繼承:理解建構子屬性
問題:
問題:function a() {} function b() {} function c() {} b.prototype = new a(); c.prototype = new b(); console.log((new a()).constructor); //a() console.log((new b()).constructor); //a() console.log((new c()).constructor); //a()
為什麼不是建構子儘管將b 和 c的原型設定為從 a 繼承,但屬性已更新?
答案:
原型物件有一個指向其建構函式的建構函式屬性。
function defclass(prototype) { var constructor = prototype.constructor; constructor.prototype = prototype; return constructor; } var Square = defclass({ constructor: function (side) { this.side = side; }, area: function () { return this.side * this.side; } }); var square = new Square(10); console.log(square.area()); // 100
現在,問題出現了:為什麼建構子屬性沒有定義在實例物件本身上?在範例中,構造函數屬性是原型的方法,就像任何其他方法一樣本。 constructor指向物件。 Object.prototype 來說是未定義的,因為它是 null 的實例。的實現,不需要定義每個實例的建構子屬性。
以上是為什麼 JavaScript 的 `constructor` 屬性在原型繼承期間不會更新?的詳細內容。更多資訊請關注PHP中文網其他相關文章!