📜  JavaScript |函数绑定(1)

📅  最后修改于: 2023-12-03 15:16:08.383000             🧑  作者: Mango

JavaScript | 函数绑定

什么是函数绑定?

函数绑定是一种技术,用于确保函数在运行时特定上下文确定。这也可以称为“显式绑定”,因为您在运行时显式指定上下文。

如何绑定函数?

通过以下两种方法可以将函数绑定到特定上下文:

  1. 使用 call() 和 apply() 手动绑定
  2. 使用 bind() 创建新函数,该函数在特定上下文中自动绑定。
手动绑定函数
1. call()

call() 方法允许您在指定上下文(即对象)中调用函数。该方法的第一个参数是用作“this”的对象,后面是以逗号分隔的参数列表。

const myObject = {
  myProperty: 'Hello, World!',
  myMethod: function () {
    console.log(this.myProperty);
  }
};

const anotherObject = {
  myProperty: 'Goodbye, World!'
};

myObject.myMethod.call(anotherObject); // logs 'Goodbye, World!'

在此示例中,我们创建了一个带有 myMethod() 方法的 myObject 对象,并创建了另一个具有相同属性的对象anotherObject。当我们使用 myObject.myMethod.call(anotherObject) 调用 myMethod() 时,在 this 上下文中使用了 anotherObject。

2. apply()

apply() 方法与 call() 方法类似,但是它允许您将参数作为数组传递。第一个参数仍然是用作“this”的对象。

const myObject = {
  myProperty: 'Hello, World!',
  myMethod: function (name) {
    console.log(this.myProperty + ' My name is ' + name);
  }
};

const anotherObject = {
  myProperty: 'Goodbye, World!'
};

myObject.myMethod.apply(anotherObject, ['John']); // logs 'Goodbye, World! My name is John'

在此示例中,我们扩展了 myMethod(),并将 name 作为参数传递。我们将 anotherObject 作为 this 上下文使用 apply() 方法调用被扩展的方法。

自动绑定函数
3. bind()

bind() 方法创建一个新函数,该函数在调用时自动将其 this 关键字绑定到指定的对象。此方法不会立即执行函数,而只是返回绑定的函数。返回的函数可以像任何其他函数一样调用。

const myObject = {
  myProperty: 'Hello, World!',
  myMethod: function () {
    console.log(this.myProperty);
  }
};

const anotherObject = {
  myProperty: 'Goodbye, World!'
};

const boundMethod = myObject.myMethod.bind(anotherObject);

boundMethod(); // logs 'Goodbye, World!'

在此示例中,我们使用 bind() 方法创建了一个新函数 boundMethod,该函数在 this 上下文中使用 anotherObject。我们稍后调用此新函数,并将日志作为“ Goodbye,World!”。

结论

函数绑定是一种重要的 JavaScript 技术,可确保函数在运行时特定上下文下运行。使用手动或自动绑定技术,您可以轻松地在 JavaScript 应用程序中使用正确的上下文运行所需的函数。