普通函数:
- this 指向函数的所有者
- 在严格模式下,普通函数指向 undefined
- 如果函数在对象内部,通过对象调用函数,则函数指向对象,否则指向 window
构造函数:
- this 指向实例化对象
箭头函数:
- this 指向和定义时的 上下文环境相关
例如:
function fn1() {
console.log(this); // window
}
var obj = {
fn2() {
console.log(this); // 用 obj.fn2() this 指向obj
// 用 var fn = obj.fn2; fn(); 方式 this 指向 window
function fn3() {
console.log(this); // window 因为 fn3 不能够通过 obj 调用
}
fn3()
var fn7 = () => {
console.log(this); // obj 因为在这个 上下文环境中 this 指向 obj
}
fn7()
},
that: this,
fn5: () => {
console.log(this); // window, 因为 ,that 指向window
var fn6 = () => {
var that2 = this; // window
console.log(this); // window
}
fn6()
}
}
var fn4 = () => {
console.log(this); // window
}
console.log(obj.that);
obj.fn5()
fn4()
fn1()
obj.fn2()
var fn = obj.fn2;
fn()