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"]
答案 0 :(得分:6)
Array
,Function
和Object
都是构造函数,因此它们都是函数。函数的length
属性指定函数采用的(命名)参数的数量。从ECMA-262第3版第15节开始:
本节中描述的每个内置Function对象 - 无论是构造函数,还是 普通函数或两者都有一个长度属性,其值为整数。除非另有规定, 此值等于函数说明的标题部分中显示的最大命名参数数,包括可选参数。
正如DCoder指出的那样:
ECMA-262第3版第15.2.3,15.3.3和15.4.3节规定所有这些构造函数都有一个length属性,其值为1.
关于静态字段的观点:JavaScript中没有静态字段,因为JavaScript中没有类。只有原始值,对象和函数。对象和函数(表现为对象)具有属性。
可能令人困惑的一件事是Function
实际上是一种功能。一个鲜为人知的事实是您可以使用此构造函数创建函数。例如:
var identity = new Function("a", "b", "return a")
console.log(identity(42))
以上将打印42
。现在注意两件事:Function
实际上接受参数并对它们做了一些事情;我向Function
构造函数传递了多个参数,即使Function.length
等于1
。结果identity
也是一个函数,其length
属性设置为值2
,因为它是一个带有两个参数的函数。
答案 1 :(得分:0)
以上提到的都是函数,它们具有属性长度,表示函数所采用的参数个数。这就是为什么他们在这里将长度作为静态变量。
fun = function( a) { alert(a); }
//fun.length = 1