javascript对象bind()方法兼容处理

Posted 【云】风过无痕

tags:

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

bind() 函数在 ECMA-262 第五版才被加入;它可能无法在所有浏览器上运行。你可以部份地在脚本开头加入以下代码,就能使它运作,让不支持的浏览器也能使用 bind() 功能

if (!Function.prototype.bind) {
  Function.prototype.bind = function(oThis) {
    if (typeof this !== "function") {
      // closest thing possible to the ECMAScript 5
      // internal IsCallable function
      throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
    }

    var aArgs = Array.prototype.slice.call(arguments, 1), 
        fToBind = this, // 此处的 this 指向目标函数
        fNOP = function() {},
        fBound = function() {
          return fToBind.apply(this instanceof fNOP
            ? this // 此处 this 为 调用 new obj() 时所生成的 obj 本身
            : oThis || this, // 若 oThis 无效则将 fBound 绑定到 this
            // 将通过 bind 传递的参数和调用时传递的参数进行合并, 并作为最终的参数传递
            aArgs.concat(Array.prototype.slice.call(arguments)));
        };

    // 将目标函数的原型对象拷贝到新函数中,因为目标函数有可能被当作构造函数使用
    fNOP.prototype = this.prototype;
    fBound.prototype = new fNOP();

    return fBound;
  };
}

 

以上是关于javascript对象bind()方法兼容处理的主要内容,如果未能解决你的问题,请参考以下文章

Jquery9 事件对象

bind()兼容性处理

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

bind() 函数兼容

深入学习jQuery事件绑定

Javascript处理对象数组