为什么Float32Array.length的值始终为3?

问题描述:

我读the Mozilla Developer Network docs on Float32Arrays当我来到为什么Float32Array.length的值始终为3?

Float32Array.length 
Length property whose value is 3. 

...为什么总是3?我还注意到,同名的原型属性覆盖了它。

+2

我倒是几乎认为这是一个宗教问题 – wvdz 2015-04-05 11:54:56

+0

@popovitsj我想他的意思42。 – 2015-04-05 11:55:30

这是因为构造函数使用最多3个参数:

Float32Array(buffer [, byteOffset [, length]]); 

在JavaScript中每个函数的长度属性将返回它所需的命名参数的数量。

E.g.

function foo(a, b) {} 
foo.length === 2; // true 

function bar() {} 
bar.length === 0; // true 

Float32Array实际上是一个功能。您可以检查是否这样

console.assert(typeof Float32Array === 'function'); 

而且该函数接受三个参数。从相同的文档引用的签名,

Float32Array(buffer [, byteOffset [, length]]); 

引述Function.length documentation

length是一个函数对象的属性,表示该功能多少个参数预计,即正式的数参数。

这就是为什么Float32Arraylength属性始终是3

这是对于(对象 - )功能Float32Array参数数目的长度。

然而,当你实例化它length将代表索引数:

console.log(Float32Array.length); // => 3, number of arguments 

var a = new Float32Array(10);  // create an instance with 10 indexes 
console.log(a.length);    // => 10, number of indexes