怎么改变this指向
时间: 2024-10-24 20:02:26 浏览: 20
在JavaScript中,"this"关键字的值取决于函数的上下文如何被调用,而不是直接在代码中硬编码的。以下是几种常见的改变this指向的方式:
1. **作为对象方法**:当在一个对象内部调用一个函数时,this通常指向该对象本身。例如:
```javascript
let obj = {
name: 'John',
sayName: function() { this.name; } // 这里的this指向obj
};
```
2. **通过call(), apply(), 或 bind()**:这三个方法允许你在运行时显式地设置this。例如:
```javascript
obj.sayName.call({name: 'Jane'}); // 这里的this变为传入的对象
```
3. **构造函数中的new关键字**:在构造函数中,this指代新创建的对象实例。例如:
```javascript
function Person(name) {
this.name = name;
}
const john = new Person('John'); // this在这里指john对象
```
4. **事件处理程序**:事件监听函数中的this也由事件源决定。可以使用event.target获取。
5. **箭头函数**:箭头函数内的this保持外部作用域的上下文,除非它被赋给新的值,如`const that = this`。
记住,对于异步函数(如回调、Promise等),this可能会更复杂,因为它们有自己的“执行上下文”规则。如果你不确定何时改变了this,可以使用`Function.prototype.bind()`来锁定特定的this值。
阅读全文