js中this的四种用法
- 在一般函数方法中使用this指代全局对象(默认绑定)
var x=1;
function test(){
console.log(this.x)
}
test(); //1
- 作为对象方法调用,this指向上级对象(隐式绑定)
function test(){
console.log(this.x)
}
var obj={
x:1,
func:test
};
obj.func(); //1
- 作为构造函数调用,this指代new出的对象(new 绑定)
function test(){
this.x = 1;
}
var o = new test();
alert(o.x); //1
- apply/call调用,this指向第一个参数(显式绑定)
var x=0;
function test(){
console.log(this.x)
}
var obj={
x:1
};
test.apply(); //0,第一个参数为空时,默认指向window对象。
test.apply(obj); //1
模拟apply/call的实现:https://www.jianshu.com/p/b7532c021bd9
- this绑定优先级
new 绑定 > 显式绑定 > 隐式绑定 > 默认绑定