PhantomJS 里的 Function.prototype.bind 坑

在用 PhantomJS 運行 stdfn.CHAR = String.fromCharCode.bind(String);時報錯:
TypeError: 'undefined' is not a function (evaluating 'String.fromCharCode.bind(String)')
經 google 一番發(fā)現(xiàn)文章 Function.prototype.bind is undefined #10522

原因:PhantomJS 調用 bind 返回 undefined

解決:Add Shim for Function.prototype.bind(),參考如下 MDN 的代碼

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,
        fNOP    = function() {},
        fBound  = function() {
          return fToBind.apply(this instanceof fNOP
                 ? this
                 : oThis,
                 aArgs.concat(Array.prototype.slice.call(arguments)));
        };

    if (this.prototype) {
      // native functions don't have a prototype
      fNOP.prototype = this.prototype; 
    }
    fBound.prototype = new fNOP();

    return fBound;
  };
}

不得不吐槽,PhantomJS 的 bind 實現(xiàn)方法居然都是錯誤的,ES5都多少年了,還不 fix。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容