从另一个作用域调用函数

Calling function from another scope

本文关键字:函数 调用 作用域 另一个      更新时间:2023-09-26

我在javascript中有以下函数:

function jsController() {
   this.foo = function() {
      $("body").click(function() {
         $(this).externalFunction(); 
      }
   };
   this.externalFunction = function() {
      alert('a');
   };
}

但是它不起作用,它说externalFunction()是未定义的。

我该如何解决这个问题?

在本例中:$(this).externalFunction() this对象的作用域为$("body")元素。解决方法:

function jsController() {
   var self = this;
   this.foo = function() {
      $("body").click(function() {
         self.externalFunction(); 
      }
   };
   this.externalFunction = function() {
      alert('a');
   };
}

您可以轻松使用.bind()来解决此问题:

function jsController() {
  this.foo = function() {
    $("body").click(function() {
      this.externalFunction(); 
    }.bind(this))
  };
  this.externalFunction = function() {
    alert('a');
  };
}

甚至像这样:

function jsController() {
  this.foo = function() {
    $("body").click(this.externalFunction.bind(this))
  };
  this.externalFunction = function() {
    alert('a');
  };
}

看到:bind