在对象中的this是指向对象本身吗

window.globalFns = {
    loginReturn : function(res){
        this.statusChangeCallBack(res);//这里的this是指向下面的statusChangeCallBack方法吗
    },
    statusChangeCallBack : function(res){
        
    }
}
阅读 2.4k
4 个回答

一般函数中的this遵循这样一个原则:

  1. 有明确调用者时,this指向调用者
  2. 没有明确调用者时,this指向全局对象,浏览器中是window,node中是global

所以你这里如果使用globalFns.loginReturn(),this指向globalFns
如果你用一个变量给他存起来了

let fun = globalFns.loginReturn;
fun();      // 因为没有明确调用者,this指向window

如果你将它赋给一个对象属性,使用新的对象来调用,this指向新对象:

let obj = {};
obj.fun = globalFns.loginReturn;
obj.fun();     // this指向obj

此外call, bind, apply都可以改变this。

谁调用指向谁

globalFns.loginReturn()  // this =>> globalFns

const fn = globalFns.loginReturn
fn() // this =>> window || undefined

还有 bind call 等情况
总的来说就是
在对象中的this不一定是指向对象本身吗

只有执行的时候才能决定this指向谁。

globalFns.loginReturn(); // this -> globalFns
var g = globalFns.loginReturn;
g();//this -> window
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题