关于js里this的指向问题

代码如下:

var obj = {
    x:1,
    y:function() {
        console.log(this.x);
    }
}
function f() {
    console.log(this.x);
}
obj.y(); //结果为1
f.call(obj.y); //结果为undefined

这里的第二个结果为什么是undefined?

阅读 2.2k
4 个回答

call方法改变this指向 指向obj.y 其实结果就是

console.log(obj.y.x)  它肯定是未定义  
//如果想输出1   那么就是
f.call(obj)   //this指向obj

因为call的参数是obj.y 如果是obj的话 那输出的是1了 obj.y里面没有x 所以是undefined

this指向最近调用它的对象,
call的第一个参数是对象,f.call(obj.y)相当于把f()里面的this指向了obj.y,
你的obj.y是个函数,是个对象,他没有x属性,所以undefined

第一个,定义了一个obj对象、对象里有x=1 和y方法。所以方法里的this指的就是obj本身,自然可以找到
而第二个,obj.y是一个方法不是对象。在里面更找不到x

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