要改变 `this` 的指向,JavaScript 提供了一系列的方法:
- call():
- 使用 `call()` 可以直接改变 `this` 的指向。
- 它接受两个参数:第一个是要调用的目标函数,第二个是将作为 `this` 的值的对象或对象引用的数组。
- 例如,使用 `call()` 和 `Person` 作为 `this` 的对象,可以这样调用 `fn()`:`fn.call(Person, "hh", 20)`。
- apply():
- `apply()` 与 `call()` 非常相似,但它接收的是一个包含要调用函数及其参数的二维数组。
- 例如,`fn.apply(Person, ["hh", 20])` 会将 `Person` 作为 `this`,并将其与 "hh" 和 20 结合在一起作为参数调用 `fn()`。
- bind():
- `bind()` 允许开发者创建一个新的函数,并将 `this` 的指向固定到指定的对象上。
- 这个新的函数可以通过 `.bind()` 构造函数或者 `.apply()` 和 `.call()` 来调用。
- 如果不需要指定 `this` 的对象,可以使用 `.bind()` 直接返回一个新的函数,之后需要使用 `.apply()` 或 `.call()` 来调用这个新函数。
- 例如,`fn.bind(Person)('hh', 20)` 会创建一个新函数,其 `this` 为 `Person`,并将其与 "hh" 和 20 结合在一起作为参数调用 `fn()`。
以上方法的示例展示了如何通过不同的参数组合来改变 `this` 的指向。在实际编程中,根据需求选择合适的方法是非常重要的