Javascript 函数未定义
我正在努力处理一个脚本,其中一个方法/对象返回未定义的Javascript 函数未定义,javascript,Javascript,我正在努力处理一个脚本,其中一个方法/对象返回未定义的 var Lang = new function(){ this.get = function(str, trans){ if(TRANSLATE[str]){ var str = TRANSLATE[str][LANG]; if(count_obj(trans) > 0){ for(var key in trans){
var Lang = new function(){
this.get = function(str, trans){
if(TRANSLATE[str]){
var str = TRANSLATE[str][LANG];
if(count_obj(trans) > 0){
for(var key in trans){
str = str.replace('%'+key+'%', trans[key]);
}
}
return str;
}
};
};
function Language(){
this.tbl_list = null;
this.append = function(string, obj, index){
var row = $('<tr></tr>')
.append('<td class="list_row">'+js2txt(string)+'</td>');
for(var key in obj){
row.append('<td class="list_row">'+js2txt(obj[key])+'</td>');
}
var td = $('<td class="list_row"></td>').appendTo(row);
//var inp_edit = $('<input type="button" value="'+Lang.get('BTN_EDIT')+'" />');
alert(Lang.get);
List.append_row(row, this.tbl_list, index);
};
};
alert(Lang.get);
var Lang=new function(){
this.get=函数(str,trans){
if(翻译[str]){
var str=翻译[str][LANG];
如果(计数对象(trans)>0){
for(变量键在trans中){
str=str.replace('%'+key+'%',trans[key]);
}
}
返回str;
}
};
};
函数语言(){
this.tbl_list=null;
this.append=函数(字符串、对象、索引){
变量行=$('')
.append(“”+js2text(string)+“”);
for(obj中的var键){
追加(“”+js2text(obj[key])+“”);
}
var td=$('').appendTo(行);
//var inp_edit=$('');
警惕(Lang.get);
List.append_行(行,this.tbl_列表,索引);
};
};
警惕(Lang.get);
在Language对象内部Lang.get
返回未定义,但在外部返回函数 我想这就是你错的地方:
var Lang = new function(){
将函数分配给变量时,不要使用new
。这样做:
var Lang = function(){
语言
函数定义和初始化悬挂在var Lang
初始化上方。是否可能在到达Lang
的初始值设定项之前调用了Language
> var Lang = new function(){
> this.get = function(str, trans){
> if(TRANSLATE[str]){
> var str = TRANSLATE[str][LANG];
> if(count_obj(trans) > 0){
> for(var key in trans){
> str = str.replace('%'+key+'%', trans[key]);
> }
> }
> return str;
> }
> }; };
我不认为有理由使用上面的新功能,这只是浪费资源。由于Lang似乎不是作为构造函数调用的,按照惯例,它应该以小写字母开头。为什么不:
var lang = {
get: function(str, trans) {
// function body
}
};
在语言对象内部,Lang.get返回未定义的,但在外部,它返回函数
你怎么称呼它?它似乎是一个构造函数,因此:
var x = new Language(); // Create instance lf Language
x.append(); // Shows Lang.get
这与作为函数调用语言
的结果相同。问题是什么
而且,jQuery的东西似乎效率很低。你可能想做这件事。e、 g
> var row = $('<tr></tr>')
> .append('<td class="list_row">'+js2txt(string)+'</td>');
>变量行=$(“”)
>.append(“”+js2text(string)+“”);
最好是:
var row = $('<tr><td class="list_row">'+js2txt(string)+'</td></tr>');
var行=$(''+js2text(字符串)+'');
或者更好的做法是创建一个具有所需结构的单行,为每一行克隆它,然后只替换单元格的内容。没有足够的上下文来理解发生了什么。如何知道内部的是什么,外部的是什么?是否存在变量范围问题?也许可以尝试将其指定为全局<代码>变量窗口。Lang=Lang
(函数上方),然后在函数中将其更改为window.Lang.get
是否显示整个代码?Lang
是Language
的一个实例吗?或者它是一个单例,应该是var Lang=new(function(){…})代码>编号。。首先初始化Lang。。代码的顺序与粘贴在此处的顺序相同。语言对象外部的Lang.get警报返回函数perfectly@clarkk. 我不是问哪个先初始化。语言肯定是先初始化的。尝试运行警报(f());var x=42;函数f(){return“x=“+x;}
,它将发出警报x=undefined
,而不是报告错误,因为先初始化f
,然后调用f
,然后初始化x
。@clarkk我要问的是在var Lang
出现在程序文本中之前是否调用了Language
。代码中没有对语言的调用。
var row = $('<tr><td class="list_row">'+js2txt(string)+'</td></tr>');