详解javascript的bind方法

JS的bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。
通过bind可解决两个问题:1)以隐蔽和优雅的方式解决依赖注入的问题,可以将函数执行需要的上下文环境对象通过bind方法传递给函数,在函数内部直接使用this来引用。2)解决多层调用时this对象无法传递给内部函数的问题,实际是第一个问题的延展。
看代码样例:

var obj = {
    a: function(){
        //'this' is 'obj',是真正的this
        console.log(this);

        var func = function(){
            //'this' is 'window', 容易混淆的地方,上层对象无法通过this引用了,这里的this是window对象了。
            console.log(this);
            //所以下面这句话出错,无法找到属性
            console.log(this.c);
        };
        func();
    },

    b : function(){
        var func = function(){
            //'this' is 'obj',是通过bind传入的。
            console.log(this);
            console.log(this.c);
        }.bind(this);
        func();
    },

    c : 'Hello!'
}

obj.a();
obj.b();

在实际开发工作中,如果需要在函数内部应用外部对象,可以通过bind传入;如果需要在嵌套函数或回调函数内部应用上级对象,也可以通过bind传入。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值