返回
this,apply,call,bind用法比较
前端
2023-10-27 21:47:45
this
this 是 JavaScript 中的一个特殊关键字,它指向当前正在执行的函数的作用域。在不同的情况下,this 可能指向不同的对象,比如:
- 当函数作为对象的方法被调用时,this 指向该对象。
- 当函数作为构造函数被调用时,this 指向新创建的对象。
- 当函数作为普通函数被调用时,this 指向全局对象(在浏览器中是 window 对象)。
apply
apply() 方法可以改变函数的执行上下文。它接收两个参数:
- 第一个参数是 this 指向的对象。
- 第二个参数是一个数组,包含要作为函数参数传递的值。
apply() 方法会将函数应用到第一个参数所指向的对象上,并使用第二个参数作为函数的参数。
call
call() 方法与 apply() 方法非常相似,但它只接收一个参数:
- 第一个参数是 this 指向的对象。
call() 方法会将函数应用到第一个参数所指向的对象上,但不会使用任何参数。
bind
bind() 方法可以创建一个新的函数,该函数的 this 指向固定为第一个参数所指向的对象。bind() 方法接收两个参数:
- 第一个参数是 this 指向的对象。
- 第二个参数是一个可选的参数列表,包含要作为函数参数传递的值。
bind() 方法不会立即执行函数,而是返回一个新的函数。当新的函数被调用时,this 指向固定为第一个参数所指向的对象,并且可以使用第二个参数作为函数的参数。
比较
下表对 this 、apply() 、call() 和 bind() 方法进行了比较:
特性 | this | apply() | call() | bind() |
---|---|---|---|---|
执行函数 | 是 | 是 | 是 | 否 |
改变 this 指向 | 否 | 是 | 是 | 是 |
传递参数 | 否 | 是 | 否 | 是 |
返回值 | 无 | 无 | 无 | 新函数 |
总结
this 、apply() 、call() 和 bind() 方法都是改变函数执行上下文的工具。它们可以帮助你更好地控制函数的行为,并在需要时改变函数中的 this 指向。
在实际开发中,你应该根据具体情况选择合适的方法。如果你需要立即执行函数,可以使用 apply() 或 call() 方法。如果你需要创建一个新的函数,可以使用 bind() 方法。
练习
请使用 this 、apply() 、call() 和 bind() 方法完成以下练习:
- 定义一个名为
Person
的类,它具有name
和age
两个属性。 - 在
Person
类中,定义一个名为greet
的方法,该方法会返回"Hello, my name is [name] and I am [age] years old."
。 - 创建一个
Person
类的实例,并使用 this 、apply() 、call() 和 bind() 方法调用greet
方法。 - 打印出
greet
方法的返回值。