在js中this指向有以下几种:
- 作为函数的方法调用,this指向它所属的对象。
- 在全局作用域下,this指向全局对象(在浏览器端指向window,在Node.js环境下指向global)。
- 在构造函数中,this指向当前正在创建的对象实例。
- 使用call()和apply()方法调用函数时,this指向调用者传入的第一个参数(即this的绑定对象)。
- 在ES6中使用箭头函数时,this指向声明该箭头函数时所在的作用域中的this。
作为函数的方法调用,this指向它所属的对象。
const obj = {
name: '勺子先生',
sayName() {
console.log(this.name);
}
}
obj.sayName(); // 输出 勺子先生
在全局作用域下,this指向全局对象
console.log(this === window); // true,window是浏览器全局对象
在构造函数中,this指向当前正在创建的对象实例。
function Person(name, age) {
this.name = name;
this.age = age;
}
const alice = new Person('勺子先生', 23);
console.log(alice.name, alice.age); // 输出 勺子先生 23
使用call()和apply()方法调用函数时,this指向调用者传入的第一个参数
function sayHi() {
console.log(`Hi, ${this.name}!`);
}
const person = { name: '勺子先生' }
sayHi.call(person); // 输出 Hi, 勺子先生!
在ES6中使用箭头函数时,this指向声明该箭头函数时所在的作用域中的this。
const obj = {
name: '勺子先生',
sayName() {
const innerFunc = () => {
console.log(this.name);
}
innerFunc();
}
}
obj.sayName(); // 输出 勺子先生
注意
函数内部的this值不是在编写函数时确定的,而是在运行时动态确定的。因此,相同的函数也可能产生不同的this值,取决于函数的调用方式。