未捕获类型错误:未定义在创建对象时不是函数

时间:2017-02-24 09:41:22

标签: javascript

Base64.js

var Base64 = {
  _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
  encode: function(e) {
    var t = "";
    var n, r, i, s, o, u, a;
    var f = 0;
    e = Base64._utf8_encode(e);
    while (f < e.length) {
      n = e.charCodeAt(f++);
      r = e.charCodeAt(f++);
      i = e.charCodeAt(f++);
      s = n >> 2;
      o = (n & 3) << 4 | r >> 4;
      u = (r & 15) << 2 | i >> 6;
      a = i & 63;
      if (isNaN(r)) {
        u = a = 64
      } else if (isNaN(i)) {
        a = 64
      }
      t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
    }
    return t
  }
}

我从另一个文件调用encode方法,如下所示  已导入base64.js文件并创建了对象

Var base64=new Base64.encode(input);

错误:

  

未捕获类型错误:undefined不是函数

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

代码中的错误:

  1. Var应为var
  2. _utf8_encode未定义。
  3. 您正在返回编码字符串。您不需要创建对象。只需var encodedStr = Base64.encode(input)
  4. 即可
  5. 在这一行

    t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
    

    在原始代码中,this是指由new创建的对象,而不是Base64,因此this._keyStrundefined。但是,如果您直接致电Base64.encode()(上面的#3),则会引用Base64,您将获得正确的值。

  6. var Base64 = {
      _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
      encode: function(e) {
        var t = "";
        var n, r, i, s, o, u, a;
        var f = 0;
        e = Base64._utf8_encode(e);
        while (f < e.length) {
          n = e.charCodeAt(f++);
          r = e.charCodeAt(f++);
          i = e.charCodeAt(f++);
          s = n >> 2;
          o = (n & 3) << 4 | r >> 4;
          u = (r & 15) << 2 | i >> 6;
          a = i & 63;
          if (isNaN(r)) {
            u = a = 64
          } else if (isNaN(i)) {
            a = 64
          }
          t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
        }
        return t
      },
      _utf8_encode: function(e) {
        // do your processing
        return e
      }
    }
    
    var input = "Hello World";
    var base64 = Base64.encode(input);
    console.log(base64)

    Rectified JSFiddle

    注意:我已定义_utf8_encode,但它返回相同的文字。请添加必要的代码。