call apply bind 代码
时间: 2023-09-07 19:15:05 浏览: 56
`call`, `apply` 和 `bind` 都是 JavaScript 中用于改变函数执行上下文的方法。
`call` 和 `apply` 的作用都是改变函数执行时的 `this` 指向。它们的区别在于传入参数的方式不同。`call` 的参数是直接传入,而 `apply` 的参数是以数组的形式传入。
例如,我们有以下函数:
```
function sayHello() {
console.log(`Hello, ${this.name}!`);
}
```
如果我们想让 `this` 指向一个名为 `Tom` 的对象,可以使用 `call` 或 `apply`:
```
const person = { name: 'Tom' };
sayHello.call(person); // 输出 "Hello, Tom!"
sayHello.apply(person); // 输出 "Hello, Tom!"
```
`bind` 则是创建一个新函数,将原函数的 `this` 绑定到一个指定的对象。与 `call` 和 `apply` 不同,`bind` 不会立即执行函数,而是返回一个新的函数,需要手动调用。
例如,我们可以使用 `bind` 创建一个新的函数 `sayHi`,将 `this` 绑定到 `person` 对象:
```
const sayHi = sayHello.bind(person);
sayHi(); // 输出 "Hello, Tom!"
```
注意,在严格模式下,如果 `this` 没有被指定,它将默认为 `undefined`。此时使用 `call` 或 `apply` 传入的第一个参数将被作为 `this` 对象。在非严格模式下,如果 `this` 没有被指定,它将默认为全局对象 `window`。