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 ,先 去测测
[置顶] 一道js题 的分析历程
最新推荐文章于 2024-05-14 01:09:25 发布