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不是函数
任何人都可以帮忙吗?
答案 0 :(得分:1)
Var
应为var
_utf8_encode
未定义。var encodedStr = Base64.encode(input)
在这一行
t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
在原始代码中,this
是指由new
创建的对象,而不是Base64
,因此this._keyStr
是undefined
。但是,如果您直接致电Base64.encode()
(上面的#3),则会引用Base64
,您将获得正确的值。
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)
注意:我已定义_utf8_encode
,但它返回相同的文字。请添加必要的代码。