📜  如何在回调中访问正确的“this”?

📅  最后修改于: 2022-05-13 01:56:48.282000             🧑  作者: Mango

如何在回调中访问正确的“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();
    
  • 输出: