2016-02-21 99 views
0

根據W3 Schools的這個頁面,對象原型是創建對象的構造函數(請注意,如果我錯誤地解釋了這個)。而且,根據我的一本Javascript書籍,原型本身就是一個對象。但是,當我這樣做:什麼是原型?構造函數或不同的對象?

JS:

function helloObject(name , id , age){ 
    this.name = name; 
    this.id = id; 
    this.age = age; 
} 

document.getElementById("testElement").textContent = typeof helloObject;//returns function 

我得到的原型是什麼,但構造函數。那麼,兩個論點中的哪一個是正確的?

+1

W3Schools的是完全錯誤的疙瘩原型和構造在一起。 ** W3S常常是錯誤的,**你不應該太依賴它們。 – deceze

回答

3

構造函數是一個函數。這就是爲什麼typeof helloObject返回function。每個函數都有一個名爲「prototype」的屬性。這prototype屬性是一個對象。你可以把它寫出來寫helloObject.prototype。 但是,原型對象僅在您使用函數(在您的情況下爲helloObject)作爲構造函數(即關鍵字爲new)時使用。因此,當您運行var obj = new helloObject()時,在obj變量中有一個新對象,此對象具有您的name, id, age屬性。但隱含地說,JavaScript在您新的對象中寫入__proto__屬性,並將構造函數的prototype屬性指定爲__proto__。在控制檯檢查了這一點:通常用於在JavaScript的繼承功能的

function helloObject(name) { 
    this.name = name; 
} 
var obj = new helloObject('Your name'); 

console.log(helloObject.prototype) 
console.log(obj.__proto__) 
console.log(helloObject.prototype === obj.__proto__) // = true 

Prototype財產。下面是幾個職位,可以幫助理解prototype更好:

http://code.tutsplus.com/tutorials/prototypes-in-javascript--net-24949

https://javascriptweblog.wordpress.com/2010/06/07/understanding-javascript-prototypes/

相關問題