聲明一個對象 aa,
let aa = {
name: '李白',
say() {
console.log(this.name + '乘舟將欲行');
}
}
再聲明一個變量 bb,另 bb = aa;
let bb = aa;
此時,bb.name; // 李白
更改bb的name屬性,則aa對象的name屬性也會跟着改變,
通過 對象深拷貝 解決
function deepClone(obj) {
if (typeof obj != 'object' || obj == null){
return obj;
}
let result;
if (obj instanceof Array) {
result = [];
} else {
result = {}
}
for (let key in obj){
if (obj.hasOwnProperty(key)){
result[key] = deepClone(obj[key]);
}
}
return result;
}
可以看到,通過 deepClone 賦值的 bb2,改變name,aa不會跟着改變,深拷貝實現。