Page 224 - 你不知道的JavaScript(下卷)
P. 224
var a = Array( 3 );
a.length; // 3
a[0]; // undefined
var b = Array.of( 3 );
b.length; // 1
b[0]; // 3
var c = Array.of( 1, 2, 3 );
c.length; // 3
c; // [1,2,3]
什么情况下你会需要使用 Array.of(..) 而不是只用 c = [1,2,3] 这样的字面值语法创建一
个数组呢?有两种可能的情况。
如果你有一个回调函数需要传入的参数封装为数组,Array.of(..) 可以完美解决这个需
求。这样的用法不是很常见,但是可能恰好“解了你的痒”。
另外一种情况是,如果你构建 Array 的子类(参见 3.4 节),并且想要在你的子类实例中创
建和初始化元素,比如:
class MyCoolArray extends Array {
sum() {
return this.reduce( function reducer(acc,curr){
return acc + curr;
}, 0 );
}
}
var x = new MyCoolArray( 3 );
x.length; // 3--oops!
x.sum(); // 0--oops!
var y = [3]; // Array, 而不是MyCoolArray
y.length; // 1
y.sum(); // sum不是一个函数
var z = MyCoolArray.of( 3 );
z.length; // 1
z.sum(); // 3
你不能(简单地)只是为 MyCoolArray 创建一个构造器来覆盖 Array 父构造器的行为,
因为那个构造器对于实际构造一个行为符合规范的数组值(初始化 this)是必要的。
MyCoolArray 子类“继承来的”静态 of(..) 方法提供了很好的解决方案。
6.1.2 静态函数 Array.from(..)
JavaScript 中的“类(似)数组对象”是指一个有 length 属性,具体说是大于等于 0 的整
数值的对象。
新增 API | 201
图灵社区会员 avilang(1985945885@qq.com) 专享 尊重版权