对象函数this的指向

var a = {
  b: {
    m: function() {
      console.log(this.p);
    },
    p: 'Hello'
  }
};

var hello = a.b.m;
hello() // undefined

hello() 为什么是undefined? 这时的this指向哪里了?

阅读 1.3k
2 个回答

此时的this指向window,而window对象上没有p属性,故返回undefined

默认情况下,this指向事件调用者,在什么环境中调用就指向那个环境,当然this是可以改变的
var a = {
  b: {
    m: function() {
      console.log(this.p);
    },
    p: 'Hello'
  }
};

var hello = a.b.m;
var hello1 = a.b.m.bind(a);
var hello2 = a.b.m.bind(a.b);
hello() // undefined  此时this指向全局window,window中无p,所以undefined
hello1() // undefined  此时this指向a对象,a对象中无p,所以说也是undefined
hello2() //Hello  此时指向的是a中的b对象,b对象有p,这样便能打印了
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题