他對我們這的意思是:功能構造
「當創建一個函數對象,即 生產函數對象的功能構造運行一些像這樣的代碼:
this.prototype = {constructor: this};
新功能對象被賦予一個原型屬性,其值是 含一個構造屬性,其值是新 功能對象」的對象
解釋一個例子會很好。
他對我們這的意思是:功能構造
「當創建一個函數對象,即 生產函數對象的功能構造運行一些像這樣的代碼:
this.prototype = {constructor: this};
新功能對象被賦予一個原型屬性,其值是 含一個構造屬性,其值是新 功能對象」的對象
解釋一個例子會很好。
例如,當你定義了這個構造函數:
function MyConstructor() {
// ...
}
它會自動接收到prototype
屬性。它的值是一個constructor
屬性的對象,這點回到構造函數:
MyConstructor.prototype; // some object
MyConstructor.prototype.constructor; // MyConstructor
這在Creating Function Objects規定:
- 創建一個新的原生ECMAScript的對象,並讓˚F是那個對象。
- 讓原是創建一個新對象如將被表達
new Object()
其中Object
是 標準內置構造與構造的結果那個名字。- 調用具有參數
"constructor"
原的[[DefineOwnProperty]]內部方法,Property Descriptor {[[價值]]:˚F,{ [[可寫]]:真,[可枚舉]]: false,[[Configurable]]: true}和false。- 呼叫的˚F帶參數
"prototype"
的[[DefineOwnProperty]]內部方法,Property Descriptor {[[價值]]:原,{[[可寫]]:真,[可枚舉]]: false,[[Configurable]]:false}和false。
然後,構造的情況下,將其prototype
對象繼承:
var myInstance = new MyConstructor();
Object.getPrototypeOf(myInstance); // MyConstructor.prototype
如果你想知道用於創建實例的構造,可以使用constructor
屬性,該屬性希望可以繼承:
myInstance.constructor; // MyConstructor
引用規範的+1 - 希望它不會混淆OP更多 – Bergi
試着創建一個函數,然後檢查它的'.prototype'屬性。 – Bergi
我不確定什麼是不明確的「*當一個函數對象被創建時,它被賦予一個原型屬性,其值是一個包含一個構造函數屬性,其值是新的函數對象*」的對象。你不瞭解哪一部分? – Bergi
道格讓它聽起來更復雜,而不是過於精確...... – dandavis