在JavaScript中,this关键字是一个特殊的变量,它指向当前执行上下文的对象。在不同的场景下,this的指向会有所不同。
- 全局作用域中的this:在全局作用域中,this指向全局对象(在浏览器中是window对象)。
console.log(this); // window
- 函数中的this:在普通函数中,this指向全局对象。但是,如果函数被作为某个对象的方法调用,那么this会指向这个对象。
function test() {
console.log(this);
}
test(); // window
var obj = {
test: test
};
obj.test(); // obj
- 构造函数中的this:在构造函数中,this指向新创建的实例对象。
function Person(name) {
this.name = name;
}
var person = new Person('Tom');
console.log(person.name); // Tom
- 箭头函数中的this:箭头函数没有自己的this,它会捕获其所在上下文的this值。
var obj = {
name: 'Tom',
sayHello: function() {
setTimeout(() => {
console.log(this.name);
}, 1000);
}
};
obj.sayHello(); // Tom
- 使用call、apply、bind方法改变this指向:可以使用call、apply、bind方法来改变函数中this的指向。
function test() {
console.log(this);
}
var obj = {
name: 'Tom'
};
test.call(obj); // obj
test.apply(obj); // obj
var newTest = test.bind(obj);
newTest(); // obj