你怎么理解this的?改变this指向的方法? 携带关键字关键字:全局调用、对象调用、事件绑定、call、apply、bind、立即执行、数组传参
时间: 2023-10-31 14:05:44 浏览: 105
this是JavaScript中一个非常重要的关键字,它指代当前函数所属的对象或者当前执行环境。改变this的指向可以使用以下方法:
1. 全局调用:在全局作用域下,this指向window对象,可以使用this关键字来访问window对象的属性和方法。
2. 对象调用:在对象方法中,this指向当前调用这个方法的对象。
3. 事件绑定:在事件处理函数中,this指向触发事件的元素。
4. call、apply、bind方法:这三种方法可以改变函数执行时的this指向。call和apply都是立即执行函数,可以传递多个参数,而bind方法返回一个新的函数,不会立即执行,可以在之后调用。
5. 立即执行:使用立即执行函数可以改变函数执行时的this指向,例如(function(){}).call(obj)。
6. 数组传参:使用apply方法可以传递一个数组作为函数的参数,可以用来改变函数执行时的this指向。
以上是改变this指向的常见方法,需要根据具体的场景来选择合适的方法。
相关问题
call apply bind 代码
`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`。
阅读全文