首頁 > web前端 > js教程 > 為什麼 JavaScript 的 `constructor` 屬性在原型繼承期間不會更新?

為什麼 JavaScript 的 `constructor` 屬性在原型繼承期間不會更新?

Barbara Streisand
發布: 2024-12-01 05:05:17
原創
618 人瀏覽過

Why Doesn't JavaScript's `constructor` Property Update During Prototypal Inheritance?

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 Foo() {}這樣的函數時,JavaScript 就會在內部建立一個Function實例(建構子
  • 每個建構函式都有一個prototype屬性,它是一個指向其原型物件的指標。
  • 原型物件有一個指向其建構函式的建構函式屬性。

原型物件有一個指向其建構函式的建構函式屬性。

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
登入後複製
當用new Foo() 建立Foo 的新實例時,會建立一個新對象,其內部的[[proto]]屬性指向該物件的原型constructor.

現在,問題出現了:為什麼建構子屬性沒有定義在實例物件本身上?在範例中,構造函數屬性是原型的方法,就像任何其他方法一樣本。 constructor指向物件。 Object.prototype 來說是未定義的,因為它是 null 的實例。的實現,不需要定義每個實例的建構子屬性。

  • 在繼承的情況下,派生建構子的原型屬性設定為基底建構子的實例。 [[proto]] 屬性也指向基本建構子的原型。 >instanceof運算子對實例物件和建構函式進行操作。原型屬性比對。

以上是為什麼 JavaScript 的 `constructor` 屬性在原型繼承期間不會更新?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板