如何在回调中访问正确的“this”?
在 JavaScript 中,“this”的行为与其他编程语言不同。如果我们正在执行正常的函数调用,那么“this”指向窗口对象。但是我们调用函数的方式与“this”不同,它将指向一个近处的对象。为了更好地理解它,我们在下面详细说明了具有两种不同调用方法的两个代码片段。
示例 1:当我们在下面的示例中以正常方式调用函数时
Javascript
function printThis(){
console.log(this);
}
printThis();
Javascript
var obj={
name: "Ramesh",
printThis: function(){
console.log(this);
}
}
obj.printThis();
Javascript
var outerFunction= function(){
innerFunction = function() {
};
setTimeout(innerFunction.bind(this),2000);
return this;
};
var obj = { method: outerFunction ,company :'geeksforgeeks'} ;
obj.method();
输出:
示例 2:当我们使用对象表示法调用函数时。
Javascript
var obj={
name: "Ramesh",
printThis: function(){
console.log(this);
}
}
obj.printThis();
输出:
所以,从上面的两个例子中,我们可以清楚地理解当我们进行不同类型的函数调用时 'this' 的行为。
方法:首先创建一个对象并输入示例属性。确保为一个键添加一个函数,在该函数中使用 setTimeout 添加一个回调函数。在这个 setTimeout函数内部,使用'bind' 来绑定 this 的上下文,然后返回 this。
示例:使用绑定
Javascript
var outerFunction= function(){ innerFunction = function() { }; setTimeout(innerFunction.bind(this),2000); return this; }; var obj = { method: outerFunction ,company :'geeksforgeeks'} ; obj.method();
输出: