一道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:21a.x 会首先执行?alz(25644652) 10:38:24a.x=a={n:2}这个连等式,两个a同进退色色 -- 北京(449211678) 10:39:04a.x 会先执行么?色色 -- 北京(449211678) 10:39:18a.x会先求值?alz(25644652) 10:39:19第一个等号肯定是后执行的,但是a.x会先执行性色色 -- 北京(449211678) 10:39:20么alz(25644652) 10:39:26正确色色 -- 北京(449211678) 10:39:553q啊如是-回归(420303167) 10:41:11a.x=a;a={n:2}如是-回归(420303167) 10:41:14?如是-回归(420303167) 10:42:32这样,a.x 也是Undefinedalz(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("write x");this._x = v;});obj1.__defineGetter__("x", function(){console.log("read x");return this._x;});obj2.__defineSetter__("x", function(v){console.log("write x");this._x = v;});obj2.__defineGetter__("x", function(){console.log("read x");return this._x;});a = obj1;a.x = a = obj2;console.log(a.x);如是-回归(420303167) 10:51:34 ,先 去测测
页:
[1]