美文网首页Web前端之路我爱编程
PhantomJS 里的 Function.prototype.

PhantomJS 里的 Function.prototype.

作者: Agreal | 来源:发表于2015-09-09 22:04 被阅读266次

    在用 PhantomJS 运行 stdfn.CHAR = String.fromCharCode.bind(String);时报错:
    TypeError: 'undefined' is not a function (evaluating 'String.fromCharCode.bind(String)')
    经 google 一番发现文章 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 实现方法居然都是错误的,ES5都多少年了,还不 fix。

    相关文章

      网友评论

        本文标题:PhantomJS 里的 Function.prototype.

        本文链接:https://www.haomeiwen.com/subject/uwlpcttx.html