JS之bind浅析及应用场景

JavaScript012

JS之bind浅析及应用场景,第1张

fn.bind(obj, args)

bind() 方法会创建一个函数,该函数的 this 指向了传入的第一个参数,当 bind() 的参数为空时, this 指向全局对象。如浏览器中的 window

因为 js 是一门 Duck typing 语言,所以我们可以通过 bind 实现一些共有方法。

有的时候我们需要针对特定的 this 调用某些方法。写起来比较麻烦,这个时候就可以使用 bind 创建一个 shortcut 方便调用。

bind 也可以绑定构造函数,但是当执行生成的函数时,会忽略this指向,即使在绑定时已经对其赋值。

javascript的bind

bind主要是为了改变函数内部的this指向,这个是在ECMA5以后加入的,所以IE8一下的浏览器不支持

bind方法会创建一个新函数,称为绑定函数.当调用这个绑定函数时,绑定函数会以创建它时传入bind方法的第一个参数作为this,传入bind方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数.

可以看这段实例:

var logger = {

    x: 0,       

    updateCount: function(){

        this.x++

        console.log(this.x)

    }

}

 

// 下面两段代码的实现是一样的

 

document.querySelector('button').addEventListener('click', function(){

    logger.updateCount()

})

 //用这种方式让代码更简洁,当然这只是bind的一种场景

document.querySelector('button').addEventListener('click', logger.updateCount.bind(logger))