我正在学习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?
答案 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
中,我将上下文绑定到回调函数。