[置顶] 一道js题 的分析历程

var a = {n:1};a.x=a={n:2};  a.x 为什么等于 未定义啊 alz老大给讲讲呗
alz(25644652) 10:37:32
因为a.x赋值的瞬间a指向原来的对象,而第二句执行完毕,a就指向{n:2}了。
色色 -- 北京(449211678) 10:38:21
a.x 会首先执行?
alz(25644652) 10:38:24
a.x=a={n:2}这个连等式,两个a同进退
色色 -- 北京(449211678) 10:39:04
a.x 会先执行么?
色色 -- 北京(449211678) 10:39:18
a.x会先求值?
alz(25644652) 10:39:19
第一个等号肯定是后执行的,但是a.x会先执行性
色色 -- 北京(449211678) 10:39:20
么
alz(25644652) 10:39:26
正确
色色 -- 北京(449211678) 10:39:55
3q啊
如是-回归(420303167) 10:41:11
a.x=a;
a={n:2}
如是-回归(420303167) 10:41:14
?
如是-回归(420303167) 10:42:32
这样,a.x 也是Undefined
alz(25644652) 10:42:58
你这拆分了是啥意思?
色色 -- 北京(449211678) 10:43:41
赋值是从右到左的
如是-回归(420303167) 10:44:01
我的意思是说,var a = {n:1};a.x=a={n:2}; 的执行是否和var a = {n:1};
a.x=a;
a={n:2}这样造价呢
如是-回归(420303167) 10:44:38
等价
如是-回归(420303167) 10:46:38
我说的不明白 吗?
如是-回归(420303167) 10:49:07
我我感觉应该是这样的,
1、a=obj,
2、a.x=a,
3、a=obj,
这样,当a被重新赋值后,a原来的属性 a.x就被remove掉了
alz(25644652) 10:50:08
当然不等价了
alz(25644652) 10:50:51
请用chrome测试这段代码,并认真分析log的顺序:
var _a;
window.__defineSetter__("a", function(v){
console.log("write a");
_a = v;
});
window.__defineGetter__("a", function(){
console.log("read a");
return _a;
});

var obj1 = {n:1};
var obj2 = {n:1};
obj1.__defineSetter__("x", function(v){
console.log("[obj1]write x");
this._x = v;
});
obj1.__defineGetter__("x", function(){
console.log("[obj1]read x");
return this._x;
});
obj2.__defineSetter__("x", function(v){
console.log("[obj2]write x");
this._x = v;
});
obj2.__defineGetter__("x", function(){
console.log("[obj2]read x");
return this._x;
});

a = obj1;
a.x = a = obj2;
console.log(a.x);
如是-回归(420303167) 10:51:34
 ,先   去测测
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值