JavaScript中this指向

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();

打印出来的结果是:

JavaScript中this指向_第1张图片

而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指向                          *****

你可能感兴趣的:(js,web前端)