小程序
小游戏
企业微信
微信支付
扫描小程序码分享
页面data用globaldata 赋值之后,用setdata改变该变量导致globaldata相应改变是怎么回事呢?
真的百思不得其解
具体请看图片
3 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
对象的赋值方式是传递地址
let a = {value: 1}
let b = a
b.value = 2
console.log(a.value)
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
深拷贝和浅拷贝的问题,拷贝一份就行了,楼上这种就是拷贝的写法
你这个是赋值的是对象的引用。就是其实this.data.a和app.globaData.a是一个引用而已,他们指向了同一个内存块。真正复制一个对象方法可以Object.assign(浅复制)或者自己写个对象clone克隆方法:
Object.prototype.clone = function() {
var copy = (this instanceof Array) ? [] : {};
for (attr in this) {
if (!obj.hasOwnProperty(attr)) continue;
copy[attr] = (typeof this[i] == "object")?obj[attr].clone():obj[attr];
}
return copy;
};
a = {k1:1, k2:2, k3:3};
b = a.clone();
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
对象的赋值方式是传递地址
let a = {value: 1}
let b = a
b.value = 2
console.log(a.value)
深拷贝和浅拷贝的问题,拷贝一份就行了,楼上这种就是拷贝的写法
你这个是赋值的是对象的引用。就是其实this.data.a和app.globaData.a是一个引用而已,他们指向了同一个内存块。真正复制一个对象方法可以Object.assign(浅复制)或者自己写个对象clone克隆方法:
Object.prototype.clone = function() {
var copy = (this instanceof Array) ? [] : {};
for (attr in this) {
if (!obj.hasOwnProperty(attr)) continue;
copy[attr] = (typeof this[i] == "object")?obj[attr].clone():obj[attr];
}
return copy;
};
a = {k1:1, k2:2, k3:3};
b = a.clone();