我正在尝试复制数组,但是我一直遇到问题。我已经用两种不同的方式尝试过,但都没有用。
第一次尝试:
function classA(id, arrayFrom, arrayTo)
{
this.id = id;
this.from = arrayFrom.slice(0);
this.to = arrayTo.slice(0);
};
输出:
未捕获的TypeError:arrayFrom.slice不是函数
第二次尝试:
function classA(id, arrayFrom, arrayTo)
{
this.id = id;
this.from = {arrayFrom[0], arrayFrom[1], arrayFrom[2]};
this.to = {arrayTo[0], arrayTo[1], arrayTo[2]};
};
输出:
未捕获的SyntaxError:意外的令牌[
答案 0 :(得分:0)
您可以使用真实数组初始化您的实例。然后它可以正常工作。
function classA(id, arrayFrom, arrayTo) {
this.id = id;
this.from = arrayFrom.slice(0);
this.to = arrayTo.slice(0);
}
var aFrom = [1, 2, 3],
aTo = [42, 43, 44],
a = new classA(0, aFrom, aTo);
aFrom[0] = 100;
console.log(a); // the instance does not change to 100
答案 1 :(得分:0)
如果您使用“数组类似”等可迭代参数(例如节点列表)调用ClassA
,那么您可能会喜欢this.from = Array.from(arrayFrom)
。
function ClassA(id, arrayFrom, arrayTo) {
this.id = id;
this.from = Array.from(arrayFrom);
this.to = Array.from(arrayTo);
}
var obj = new ClassA(1,{0:"a",1:"b",length:2},{length:0});
console.log(obj);
Array.from()
即使提供的对象没有迭代器也只有length
属性。
答案 2 :(得分:-1)
function classA(id, arrayFrom, arrayTo){
this.id = id;
this.from = arrayFrom.slice(0, arrayFrom.length);
this.to = arrayTo.slice(0, arrayTo.length);
}
让我们尝试一下:) 但是你的函数没有复制数组...我只是写你的代码;)