![](/img/trans.png)
[英]Confusion about when to use prototype in Crockford's example of Pseudoclassical Inheritance
[英]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
這在創建函數對象中指定:
- 創建一個新的本機ECMAScript對象,讓F成為該對象。
- 讓proto成為創建一個新對象的結果,該對象將由表達式
new Object()
構造,其中Object
是具有該名稱的標准內置構造函數。- 使用參數
"constructor"
調用proto的[[DefineOwnProperty]]內部方法, 屬性描述符 {[[Value]]: F ,{[[Writable]]: true ,[[Enumerable]]: false ,[[Configurable]] : true }, false 。- 使用參數
"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.