2016-09-14 114 views
0

請參考給定的例子:怪異的行爲

代碼:

var Person = function (name) { 
    this.name = name; 
} 
var john = new Person("John"); 
console.log(Person.prototype);//Object{} 
console.log(john.prototype); //undefined 

人如此它的原型會從對象中得到這樣的理解的功能,它給返回對象(其還具有構造器& 原型)作爲其屬性。

來到第二個控制檯語句。因爲,約翰是人的一個實例,因此它必須與人擁有相同的原型。意思是,我應該得到一個對象作爲回報。我如何得到undefined?有人可以解釋嗎?

回答

1

一個類有一個原型,一個類的實例沒有原型。

該類必須創建新實例,因此它有一個原型。 john不必實例化新的實例,所以他沒有理由有一個原型。

如果你真的必須在類的實例的原型,你可以這樣做(假設函數不改變名稱):

var Person = function (name) { 
    this.name = name; 
    this.prototype=Person.prototype; 
} 

請記住,它更多的一個比解決方案快得多的黑客,誰知道什麼時候會證明不方便。

1

我認爲this questionthis question會幫助你。

「實例」沒有原型,它們通過內部[[Prototype]]鏈接到它們,這是不可訪問的。還有一個名爲__proto__的屬性,它是非標準的(不可靠的),但指向原型。