bind() 函数兼容

Posted 菜鸟提升记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bind() 函数兼容相关的知识,希望对你有一定的参考价值。

为了搞清这个陌生又熟悉的bind,google一下,发现javascript1.8.5版本中原生实现了此方法,目前IE9+,ff4+,chrome7+支持此方法,opera和safari不支持(MDN上的说明)。 
bind的作用和apply,call类似都是改变函数的execute context,也就是 runtime 时 this 关键字的指向。但是使用方法略有不同。一个函数进行bind后可稍后执行。

 bind 方法实现:绑定this  和 “科里化”:

function getConfig(colors,size,otherOptions){

  console.log(colors,size,otherOptions)

}

var defaultConfig = getConfig.bind(null,"#f00","1024*768");

defaultConfig("123");  //#f00 1024*768 123

defaultConfig("345");  //#f00 1024*768 345

因为bind 方法是EMS5 以后提出的方法,对于老的浏览器,可以使用手写一个bind 方法

if(!Function.prototype.bind){

  Function.prototype.bind = function(oThis){

    if(typeOf this !== ‘function‘){

      throw new TypeError(‘What is trying to be bound is not callable‘)

    }

    var aArgs = Array.prototype.slice.call(arguments,1),

      fToBind = this,

      fNOP = function(){};

      fBound = function(){

        return fToBind.apply(this instanceof fNOP?this:oThis,

           aArgs.concat(Array.prototype.slice.call(arguments)))

      }

    fNOP.prototype = this.prototype;

    fBound.prototype = new fNOP();

    return fBound;

  }

}

以上是关于bind() 函数兼容的主要内容,如果未能解决你的问题,请参考以下文章

JS事件之自建函数bind()与兼容性问题解决

javascript中apply,call,bind区别,bind兼容等问题总结

bind()兼容性处理

std::bind 是不是应该与 boost::asio 兼容?

react合成事件——bind解决this指向——箭头函数解决this指向

自定义bind方法