为什么在javascript中使用“this”关键字时上下文是窗口

时间:2016-07-09 08:22:10

标签: javascript

我正在学习JS中的“this”,我有以下代码:

var person1 = {
  firstName: "John",
  lastName: "Snow",

  printName: function(){
    console.log(this);
  }
}

var person2 = {
  firstName: "Aria",
  lastName: "Stark",

  printName: function(callbackFunction){
    console.log(this);
    callbackFunction();
  }
}

person1.printName();
person2.printName(person1.printName);

此代码的输出为:

PERSON1

PERSON2

窗口

我理解为什么上下文是person1和person2,但为什么当我调用回调时,上下文是窗口而不是person2?

1 个答案:

答案 0 :(得分:0)

在你的情况下,

callbackFunction是一个表达式(类型为函数),它根据它们的调用方式获取上下文(如果没有提供上下文,则为窗口的上下文)。

如果你想调用person1的方法,那就把它调整为

var person1 = {
  firstName: "John",
  lastName: "Snow",

  printName: function(){
    console.log(this);
  }
}

var person2 = {
  firstName: "Aria",
  lastName: "Stark",

  printName: function(context, callbackFunction){
    console.log(this);
    callbackFunction.bind(context).call(null);
  }
}

person1.printName();
person2.printName(person1,person1.printName);

此处我还传递了context,其中应调用callbackFunction

在函数person2.printName中,我将上下文绑定到回调函数。