将数组复制到“this”变量(创建类似Array的对象)

时间:2015-11-11 17:24:34

标签: javascript

有没有更好的方法将数组复制到此变量

function obj(arr) {
  for (var i=0, l=arr.length; i<l; ++i) {
    this[i] = arr[i];
  }
  this.length = arr.length;
}

var o = new obj([1,2,3,4]);
console.log(o[0]); // Outputs 1

有没有其他方法可以做到,而不是遍历整个arr

2 个答案:

答案 0 :(得分:2)

您可以这样使用Array#push

function obj(arr) {
  Array.prototype.push.apply(this, arr);
}

这会将this视为一个数组,添加arr中的所有元素并正确设置length。另请参阅Function#apply

但当然还有一个内部循环。您无法将集合值复制/移动到另一个集合而不进行迭代(除非,我猜,集合使用structural sharing

答案 1 :(得分:1)

你可以这样做:

function obj() {
    return this;
}

var o = obj.apply([1,2,3,4]);
console.log(o[0]); // Outputs 1