Typescript/js 笔记(5) this与作用域

在函数中,this指向当前函数的作用域,this的值在函数被调用的时候才会指定。

我如果在类中写了一个

class A{
    private a:number=0;
    private b:number=0;

    public testFun(){
        this.a=this.b=10;
    }
}

这里的this就是类A的一个对象,可以正确的修改对象的a与b值

而如果是这样:你觉得是输出是5还是10?

class A{
    private a:number=0;
    private b:number=0;

    public testFun(){
        this.a=this.b=10;
        let b:B=new B();
        b.callFun(this.testFun2);
    }

    public testFun2(){
        console.log(this.a);
    }
}

class B{
    private a:number=5;

    public callFun(cb:Function){
        cb();    
    }
}

最后console输出的即不是10也不是5,

当你将一个函数传递到某个库函数里稍后会被调用时。 因为当回调被调用的时候,它们会被当成一个普通函数调用, this将为undefined

【顶级的非方法式调用会将 this视为window。 (在严格模式下, thisundefined而不是window】

所以输出语句就变成了console.log(window.a),a未定义,输出undefined

所以在工作中,通常在将函数作参数传递时,要将this绑定到函数上

方法有两种

1.使用bind方法,参数即为作用域,如可以将上面的调用改成:

b.callFun(this.testFun2.bind(this));

2.使用箭头函数()=>{},箭头函数能保存函数创建时的 this值,相当于自动绑定this

b.callFun(()=>{this.testFun2()});也是一样的

这样console就会输出10了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值