一、介绍
在常见的编程语言中,几乎都有this这个关键字(Objective-C中使用的是self),但是JavaScript中的this和常见的面向对象语言中的this不太一样:
常见面向对象的编程语言中,比如Java、C++、Swift、Dart等等一系列语言中,this通常只会出现在类的方法中。
也就是你需要有一个类,类中的方法(特别是实例方法)中,this代表的是当前调用对象。
但是JavaScript中的this更加灵活,无论是它出现的位置还是它代表的含义。
二、使用
1、默认绑定:指向window,但是在严格模式下指向undefined
function foo() {
console.log(this)
}
foo()//window
2、隐式绑定,这个就比较简单了,就是谁调用了这个this,this就指向谁
var obj = {
name: "why",
foo: foo
}
obj.foo() // obj对象
3、绑定三:显示绑定,call/apply的第一个参数就是this的指向
var obj = {
name: "obj"
}
// call/apply是可以指定this的绑定对象
foo.call(obj)
foo.apply(obj)
foo.apply("aaaa")
4、new关键字, 指向实例话对象(除非构造函数返回一个引用类型,则new失效。this指针绑定变为返回的引用类型)
5、箭头函数,这个就比较特殊了,因为箭头函数没有this,所以他里面的 this 其实是根据他的上级来定的,也就是他的 this 指向等于他的上级。
var func = () => {
console.log(this);
};
var obj = {
ber: func,
};
obj.ber(); //window
var o = {
a: 10,
b: {
a: 12,
fn: function () {
console.log(this.a);
},
},
};
o.b.fn(); //b