返回

this,apply,call,bind用法比较

前端

this

this 是 JavaScript 中的一个特殊关键字,它指向当前正在执行的函数的作用域。在不同的情况下,this 可能指向不同的对象,比如:

  • 当函数作为对象的方法被调用时,this 指向该对象。
  • 当函数作为构造函数被调用时,this 指向新创建的对象。
  • 当函数作为普通函数被调用时,this 指向全局对象(在浏览器中是 window 对象)。

apply

apply() 方法可以改变函数的执行上下文。它接收两个参数:

  • 第一个参数是 this 指向的对象。
  • 第二个参数是一个数组,包含要作为函数参数传递的值。

apply() 方法会将函数应用到第一个参数所指向的对象上,并使用第二个参数作为函数的参数。

call

call() 方法与 apply() 方法非常相似,但它只接收一个参数:

  • 第一个参数是 this 指向的对象。

call() 方法会将函数应用到第一个参数所指向的对象上,但不会使用任何参数。

bind

bind() 方法可以创建一个新的函数,该函数的 this 指向固定为第一个参数所指向的对象。bind() 方法接收两个参数:

  • 第一个参数是 this 指向的对象。
  • 第二个参数是一个可选的参数列表,包含要作为函数参数传递的值。

bind() 方法不会立即执行函数,而是返回一个新的函数。当新的函数被调用时,this 指向固定为第一个参数所指向的对象,并且可以使用第二个参数作为函数的参数。

比较

下表对 thisapply()call()bind() 方法进行了比较:

特性 this apply() call() bind()
执行函数
改变 this 指向
传递参数
返回值 新函数

总结

thisapply()call()bind() 方法都是改变函数执行上下文的工具。它们可以帮助你更好地控制函数的行为,并在需要时改变函数中的 this 指向。

在实际开发中,你应该根据具体情况选择合适的方法。如果你需要立即执行函数,可以使用 apply()call() 方法。如果你需要创建一个新的函数,可以使用 bind() 方法。

练习

请使用 thisapply()call()bind() 方法完成以下练习:

  1. 定义一个名为 Person 的类,它具有 nameage 两个属性。
  2. Person 类中,定义一个名为 greet 的方法,该方法会返回 "Hello, my name is [name] and I am [age] years old."
  3. 创建一个 Person 类的实例,并使用 thisapply()call()bind() 方法调用 greet 方法。
  4. 打印出 greet 方法的返回值。

参考