一段关于Javascript中this的理解问题?

看到了这么一段代码,如下:

function foo() {      
     console.log( this.a ); 
} 
 
var obj2 = {      
    a: 42,     
    foo: foo  
}; 
 
var obj1 = {      
    a: 2,     
    obj2: obj2  
}; 
 
obj1.obj2.foo(); //42

请问应该如何理解这段代码呢?
按我的理解,obj2最后应该是:

var obj2 = {      
    a: 42,     
    foo: function () {      
        console.log( this.a ); 
    }   
};
var obj1 = {      
    a: 2,     
    foo: {      
        a: 42,     
        obj2: function () {      
            console.log( this.a ); 
        }   
    }  
};

如果是这样,实在不理解最后obj1.obj2.foo();这种链式写法,
还望指点迷津,谢谢!

阅读 2.5k
5 个回答
var obj1 = {      
    a: 2,     
    obj2: {      
        a: 42,     
        foo: function () {      
            console.log( this.a ); 
        }   
    }  
}; 

这不是链式调用,就是简单的对象属性而已。

这个很好理解啊,就是一个对象内存着另一个对象
而对象内属性的调用不都是.么
js是这样php也是这样啊
$obj1->obj2->fun();这样的结果就是调用obj1内存储的obj2对象的一个函数

var obj1 = {      
    a: 2,     
    obj2: {      
        a: 42,     
        foo: function () {      
            console.log( this.a ); 
        }   
    }  
};

obj1.obj2.foo();就是一个属性访问表达式,这里属于方法调用即调用obj1.obj2的foo()方法,obj1.obj2为调用上下文,最后输出值自然是42。

兄弟如果你下次还辨别不清楚this 的问题,这么的你就这么想 .前面是谁this就指向谁, 除了部分由window调用的除外。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题