6

Function、Array 和 Object 构造函数的长度静态属性是什么?

静态方法是有意义的,但是长度静态属性呢?

Object.getOwnPropertyNames(Array)
["length", "name", "arguments", "caller", "prototype", "isArray"]

Object.getOwnPropertyNames(Function)
["length", "name", "arguments", "caller", "prototype"]

注意:我得到了关于 Function.prototype 的长度属性的答案,这里没有询问。

Object.getOwnPropertyNames(Function.prototype)
["length", "name", "arguments", "caller", "constructor", "bind", "toString", "call", "apply"]

Object.getOwnPropertyNames(Object)
["length", "name", "arguments", "caller", "prototype", "keys", "create", "defineProperty", "defineProperties", "freeze", "getPrototypeOf", "getOwnPropertyDescriptor", "getOwnPropertyNames", "is", "isExtensible", "isFrozen", "isSealed", "preventExtensions", "seal"]
4

2 回答 2

6

Array, Function, 和Object都是构造函数,所以它们都是函数。函数的length属性指定函数采用的(命名)参数的数量。来自 ECMA-262 第 3 版,第 15 节:

本节中描述的每个内置函数对象——无论是作为构造函数、普通函数还是两者——都有一个长度属性,其值为整数。除非另有说明,否则此值等于函数描述部分标题中显示的命名参数的最大数量,包括可选参数。

正如 DCoder 指出的那样:

ECMA-262 第 3 版,第 15.2.3、15.3.3 和 15.4.3 节指定所有这些构造函数都有一个长度属性,其值为 1。

关于静态字段的观点:JavaScript中没有静态字段之类的东西,因为JavaScript中没有类。只有原始值、对象和函数。对象和函数(也表现为对象)具有属性

可能令人困惑的一件事是,Function它实际上是一个函数。一个鲜为人知的事实是,您可以使用此构造函数创建函数。例如:

var identity = new Function("a", "b", "return a")
console.log(identity(42))

以上将打印42。现在注意两件事:Function实际接受参数并用它们做一些事情;并且我向构造函数传递了多个参数Function,即使Function.length等于1. 结果 ,identity也是一个函数,其length属性设置为 value 2,因为它是一个有两个参数的函数。

于 2012-12-27T07:13:01.603 回答
0

上面提到的所有都是函数,它有一个属性长度,表示函数接受的参数数量。这就是为什么它们在这里将长度作为静态变量。

fun = function( a) { alert(a); }
//fun.length = 1
于 2012-12-27T07:16:51.383 回答