2012-12-23 62 views
3

下面的代碼將記錄a,a.length和b.test。 a和b.test都產量[1,2,3]。編輯 - 我搞砸了。 b.test產量未定義。請參閱下面的雷納迴應。使用Javascript獲取分配給擴展函數原型的數組的長度

則爲a.length產量3.

b.test.length失敗「的未定義無法讀取屬性‘長’」

爲什麼會出現這樣的情況時,一個和b.test相等?


var a = [1,2,3]; 

var b = function(){}; 

b.prototype.test=[1,2,3]; 

console.log(a); 

console.log(a.length); 

console.log(b.test); 

console.log(b.test.length); 
+0

'console.log(b.test);'打印'undefined',而不是'[1,2,3]'。 –

+0

謝謝,Matt。我也看到了現在,我一定忽略了一些東西 – temporarylight

+0

請參閱** [JavaScript是如何做的。原型工作?](http://stackoverflow.com/a/572996/500725)**答案 –

回答

5

因爲b沒有test財產 - 這是一個功能的,其原型對象Function.prototype之一。使用此功能創建

但對象將在其原型鏈這個屬性(如prototype財產b指向具有定義test屬性的對象,所以這 ...

console.log(new b().test.length); 

.. 。應該給你3個,如預期的那樣。

+0

謝謝拉尼,這有所幫助。 – temporarylight