如何在不更改原始属性的情况下复制JS构造函数中的属性



我是JS构造函数的新手。我有一个对象/构造函数。函数将数据作为属性。然而,我需要两个数据副本:一个要更改,然后一个作为重置的参考。然而,无论怎样,更改一个似乎都会更改另一个:

var myData = [1, 2, 3, 4, 5]
myFunction(myData)
function myFunction(data){
this.updatableData = data;
this.resetData = data;
this.updatableData.pop()
console.log(this.resetData)
//expect [1,2,3,4,5]
//but get [1,2,3,4]

}

使用排列语法复制原始数组

var myData = [1, 2, 3, 4, 5]
myFunction(myData)
function myFunction(data){
this.updatableData = data;
this.resetData = [...data];
this.updatableData.pop()
console.log(this.resetData)
}

您可以对浅拷贝使用排列语法。

this.updatableData = [...data];

Array#slice:

this.updatableData = data.slice();

这叫做引用类型。

更改引用时,它会影响指向该地址的所有对象。

在好的旧javascript中,我们曾经复制这样的数组:

var arr = [1,2,3,4];
var arr_copy = [].concat(arr);
arr.pop(); // remove last item from the original array
console.log(arr) // prints [1,2,3]
console.log(arr_copy) // prints [1,2,3,4]

如果你正在寻找一个跨浏览器的解决方案,这种方法仍然是实际的。

最新更新