题目
var a = {n: 1};
var b = a;
a.x = a = {n:2}
console.log(a,a.x,b,b.x);
第一步: a和b变量的地址都指向 {n:1}
第二步:在js中的 . 运算符比 = 高 所以生成了一个x属性
第三步:a的地址修改为{n:2}的地址,原来的a.x即b.x修改为{n:2}
// 所以输出
a: {n:2}
a.x: undefined
b: {n:1,x:{n:2}}
b.x: {n:2}
验证
// 验证 a.x赋值的时候会不会a改为了{n:2} 还是{n:1} 写一个简单的验证demo
var a = {n:1};
let handler = {
get: function(target, name,proxy){
let cloneObj = JSON.parse(JSON.stringify(target));
console.log('get',cloneObj,name);
return target[name];
},
set: function(obj, prop, value,proxy) {
let cloneObj = JSON.parse(JSON.stringify(obj));
let cloneValue = JSON.parse(JSON.stringify(value));
console.log('set',cloneObj,prop,cloneValue);
obj[prop] = value;
}
};
let pA = new Proxy(a, handler);
b=pA;
pA.x = pA = {n:2};
console.log(pA);
console.log(pA.x);
console.log(b);
console.log(b.x);
可以看到赋值set的时候的对象还是 {n:1} 所以输出值同上