什么是功能,Array和对象构造的长度财产?(What is the length property

2019-08-04 18:49发布

什么是功能,数组和对象构造的长度静态属性?

静态方法是有道理的,但对于长静态属性是什么?

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"]

Answer 1:

ArrayFunction ,以及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 ,因为它是有两个参数的函数。



Answer 2:

所有上面提到的功能是,其具有属性长度,称自变量的函数采用tjhe数。 这就是为什么他们有长度为这里静态变量。

fun = function( a) { alert(a); }
//fun.length = 1


文章来源: What is the length property of the Function, Array, and Object constructors?