簡體   English   中英

Crockford的偽經典繼承部分中的函數構造函數

[英]Function constructor in Crockford's pseudoclassical inheritance section

他的意思是:

“創建函數對象時,生成函數對象的Function構造函數會運行如下代碼:

this.prototype = {constructor: this};

新函數對象被賦予一個prototype屬性,其值是一個包含構造函數屬性的對象,其值為新函數對象“

用例子解釋會很棒。

例如,當您定義此構造函數時:

function MyConstructor() {
   // ...
}

它會自動接收prototype屬性。 它的值是一個帶有constructor屬性的對象,它指向構造函數:

MyConstructor.prototype; // some object
MyConstructor.prototype.constructor; // MyConstructor

這在創建函數對象中指定:

  1. 創建一個新的本機ECMAScript對象,讓F成為該對象。

  1. proto成為創建一個新對象的結果,該對象將由表達式new Object()構造,其中Object是具有該名稱的標准內置構造函數。
  2. 使用參數"constructor"調用proto的[[DefineOwnProperty]]內部方法, 屬性描述符 {[[Value]]: F ,{[[Writable]]: true ,[[Enumerable]]: false ,[[Configurable]] : true }, false
  3. 使用參數"prototype"調用F的[[DefineOwnProperty]]內部方法, 屬性描述符 {[[Value]]: proto ,{[[Writable]]: true ,[[Enumerable]]: false ,[[Configurable]] : false }, false

然后,構造函數的實例將從其prototype對象繼承:

var myInstance = new MyConstructor();
Object.getPrototypeOf(myInstance); // MyConstructor.prototype

如果您想知道用於創建實例的constructor ,可以使用constructor屬性,希望將繼承該屬性:

myInstance.constructor; // MyConstructor

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM