1. 作为普通函数
function fn1() {
console.log(this);
}
fn1(); // window2. 使用call、bind、apply 调用
function fn1() {
console.log(this);
}
fn1.call({ name: 'zhangsan' }); // {name: 'zhangsan'}
const fn2 = fn1.bind({ name: 'lisi' });
fn2(); // {name: 'lisi'> 函数的bind是返回一个新的函数
3. 作为对象方法调用
const fn1 = {
name: 'gonwe',
sayName() {
console.log(this); // {name: 'gonwe'}
},
wait() {
setTimeout(function () {
console.log(this); // window
});
}
}4. 在箭头函数调用
const fn2 = {
name: 'gonwe',
sayName() {
console.log(this); // {name: 'gonwe'}
},
wait() {
setTimeout(() => {
console.log(this); //{name: 'gonwe'}
});
}
} > 箭头函数的this永远是取它上一级作用域的this
5. 在class方法中调用
class Person {
constructor(name) {
this.name = name;
}
sayName() {
console.log(this);
}
}
const Person1 = new Person('gonwe');
Person1.sayName(); // {name: 'gonwe'}> this取值是在函数执行的时候,不是在函数定义的时候
>
> this取值是在函数执行的时候,不是在函数定义的时候
>
> this取值是在函数执行的时候,不是在函数定义的时候