js 如何理解 this

this:this的指向,看具体怎么调用

this的四种绑定规则:默认绑定,隐式绑定,显式绑定,new绑定。  优先级从低到高。

1.默认规则,默认绑定window。

function a(){
    console.log(this.test);
}
var test = 7;

a(); //7

 2.隐式绑定,多层调用链,就近原则,上下文对象。


function a(){
    console.log(this.b)
}
var b = 2;
var obj={
    b:3,
    a:a
}

obj.a() //3

//多层调用

function a(){
    console.log(this.b)
}

var a = 2;
var obj={
    b:3,
    a:a
};
var obj ={
    b:4,
    obj:obj
};

obj1.obj.a(); // 4


//隐式中需要注意的(使用的还是默认绑定) 
//obj.a 是引用属性,赋值给foo的实际上就是a函数
1.
function a(){
    console.log(this.b)
}
var b =2;
var obj ={
    b:3,
    a:a
};
var foo = obj.a;
foo()// 2

2.
function a(){
    console.log(this.b)
}
var b =2;
var obj ={
    b:3,
    a:a
};
setTimeOut(obj.a , 1000) //2

3.显式绑定,避免动态变化,绑定到指定对象 ,call(obj,{}),apply(obj,arr)

 

function a(){
    console.log(this.b)
}
var b =2;
var obj ={
    b:3
}
var obj1 ={
    b:4
}

a.call(obj);
a.apply(obj1);

4.new绑定,如果函数没有返回其他对象,那么new表达式中的函数调用会自动返回这个新对象。

function a(){
    console.log(this.b)
}
var b =2;
var c = new a(3) 
 c.a //3
var d = new a(4) 
 d.a // 4 

5.绑定优先级的规则。

   new(new新创建的对象)->显式绑定(call,apply中指定的对象)->隐式绑定(上下文对象)->默认绑定(非严格模式下,为全局对象,否则为undefined)。

6.箭头函数,this的绑定只取决与外层(函数或全局)作用域,显式绑定在箭头函数中不生效

1.
var a = () => {   
    console.log( this.b );
}

var b = 2;

var obj = { 
    b: 3,
    a: a 
};

obj.a(); //2
a.call(obj); //2 ,箭头函数中显示绑定不会生效



2.

function a(){ 
    return () => {
        console.log( this.b );
    }   
}

var b = 2;
var obj = { 
    b: 3,
    a: a 
};
var c = obj.a();
c(); //3

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值