什么是功能,数组和对象构造的长度静态属性?
静态方法是有道理的,但对于长静态属性是什么?
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"]
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
属性的值设置为2
,因为它是有两个参数的函数。
所有上面提到的功能是,其具有属性长度,称自变量的函数采用tjhe数。 这就是为什么他们有长度为这里静态变量。
fun = function( a) { alert(a); }
//fun.length = 1
文章来源: What is the length property of the Function, Array, and Object constructors?