关于this的指向,通俗说法是“谁调用它,this就指向谁”
没问题,但不全面,this的指向规律有以下几条:
- 在函数体中,非显式或隐式的简单调用函数时,在严格模式下,函数内的this会被绑定到undefined上,在非严格模式下则会绑定到全局对象window/global上
- 一般使用new方法调用构造函数时,构造函数的this会被绑定到新创建的对象上
- 一般通过call/apply/bind方法显式调用函数时,函数体内的this会被绑定到指定参数的对象上
- 一般通过上下文对象调用函数时,函数体内的this会被绑定到该函数对象上。
- 在箭头函数中,this的指向是由外层作用域来决定的。
例题1:
var foo = {
bar: 10,
func() {
console.log(this);
console.log(this.bar);
}
}
var fn2 = foo.func;
fn2(); // this指向window
例题2:
var stu = {
name: "zhangsan",
son: {
name: "zhangxiaosan",
fn(){
return this.name;
}
}
}
console.log(stu.son.fn()); // zhangxiaosan
例题3:
var o1 = {
text: "o1",
fn(){
return this.text;
}
}
var o2 = {
text: "o2",
fn() {
return o1.fn();
}
}
var o3 = {
text: "o3",
fn(){
var fn2 = o1.fn;
return fn2(); // 这里相当于普通函数的调用
}
}
console.log(o1.fn()); // o1
console.log(o2.fn()); // o1
console.log(o3.fn()); // undefined
this 指向绑定事件的元素
DOM元素绑定事件时,事件处理函数里面的 this指向绑定了事件的元素