JavaScript中this的四大判定:
1.默认绑定this指向window:
example:
function test (c){
var a = 123;
function b(){
}
}
test(1);
在预编译的过程当中
AO{
c:1
a:undefoned
arguments:[1]
this:window
b:function(){}
}
默认this指向window
举个例子:
function test(){
console.log(this);
}
test();
打印出来的结果是:
而this的指向是:
所以默认this指向window
改变this指向有哪些方法
2.隐式的绑定:谁调用this指向谁
example:
var str = '11111';
var obj = {
str : '2222',
callStr : function(){
console.log(this.str);
}
}
obj.callStr();// ---->打印的结果是2222,因为是obj调用this
var fun = obj.callStr;
fun();// 打印的结果是11111,
// 因为var fun = obj.callStr;已经在全局范围内定义了fun,
然后再调用fun,this就指向了window
3.显示的转换 call apply
4.new 操作符改变this指向
example:
var foo = '123';
function print(){
this.foo = '789';
console.log(foo);
}
print();
打印出的结果是 789,预编译环节,自己本身的AO里面没有foo,所以就去全局GO里面寻找,然后this指向window,所以GO中的foo = 123 就被 this中的foo取代为 789,
在new的情况下,
var foo = '123';
function print(){
this.foo = '789';
console.log(foo);
}
new print();
打印出的结果是 123
创建new的时候,在函数内部里面存在一个隐式的this
var this = {
__proto__ :Object.prototype }
然后在预编译的环节中,函数体里面的AO对象中没有foo,所以就会去全局里面寻找,所以最后打印出的结果是123,new的权重最高。
总结: ESS this四大判定规则 权重
1.默认绑定this指向window 默认
2.隐式的绑定: 谁调用this指向谁 ***
3.显示的转换: call apply ****
4.new 操作符改变this指向 *****