2014-12-05 111 views
0

array.length和array.prototype.length之間有什麼區別?什麼array.prototype.length給我一個錯誤

MDN says它們應該在功能上等同。有什麼不同?我應該什麼時候使用一個?爲什麼後者給我一個錯誤?

var a = [1,2,3,4,5]; 
console.log(a.length);//5 
console.log(a.prototype.length);// Uncaught TypeError: Cannot read property 'length' of undefined 
+1

「*功能等效*」並不意味着它們是相同的東西。他們是完全獨立的事物,**表現**相同。 – RobG 2014-12-05 00:19:32

+2

'prototype'屬性通常只是用作構造函數的'function'的成員,如'Array.prototype'和'new Array()'。除非您自己設置,否則您不會在正在創建的實例上找到該屬性。 – 2014-12-05 00:21:18

回答

3

Array.prototypea.prototype(其中a是陣列)之間的差。

有沒有這樣的事情a.prototype。這些實例沒有這個屬性,只有它們的構造函數(Javascript引擎以某種其他的引擎特定和非標準化的方式將它附加到實例上)。

+0

你能詳細說一下嗎? – 1252748 2014-12-05 00:13:52

+2

@thomas:沒有標準的方法來獲取已經創建的對象的原型。如果'a.prototype'在一些例外的環境中工作,而不是規則。 – Jon 2014-12-05 00:15:38

+1

@Jon AFAIK你也可以通過'a.constructor'屬性從'a'獲得一個'Array' – blgt 2014-12-05 00:17:54

3

Array.prototype是一個數組,其長度最初被設置爲0。

Array實例有自己的,特殊的,自我調節長度財產,所以當你做:

var a = []; 
console.log(a.length); 

你所看到的價值a的長度屬性,它不是從它的[[Prototype]]繼承。當你這樣做:

console.log(Array.prototype.length); 

您所看到的Array.prototype陣列,這是一個不同的對象與自身的長度屬性的長度。更改Array實例長度的長度不會影響Array.prototype的長度,反之亦然

+0

關於你的鏈接,「其初始值爲+0」是什麼意思? – 1252748 2014-12-05 00:19:47

+0

它只是表示最初它的長度是零(即它是一個空數組)。 – RobG 2014-12-05 00:22:18

+0

大括號中的[[Prototype]]是什麼? – 1252748 2014-12-05 04:30:10

相關問題