我正在努力学习一个方法/对象返回undefined
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);
语言对象Lang.get
内的返回undefined,但在它之外返回函数!?
答案 0 :(得分:1)
我认为这是你出错的地方:
var Lang = new function(){
在为变量分配函数时不要使用new
。这样做:
var Lang = function(){
答案 1 :(得分:0)
在Language
初始化之上挂起var Lang
函数定义和初始化。在达到Language
的初始值设定项之前,是否可能会调用Lang
?
答案 2 :(得分:0)
> 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
}
};
。
> function Language(){
> this.tbl_list = null;
>
> this.append = function(string, obj, index){
> /* snip */
> alert(Lang.get);
> /* snip */
> }; };
alert(Lang.get); // shows source of Lang.get
在Language对象里面,Lang.get返回undefined,但在它之外返回函数!?
你怎么称呼它?它似乎是一个构造函数,所以:
var x = new Language(); // Create instance lf Language
x.append(); // Shows Lang.get
与调用Language
作为函数的结果相同。有什么问题?
此外,jQuery的东西似乎效率很低。你可能想要解决这个问题。 e.g。
> var row = $('<tr></tr>')
> .append('<td class="list_row">'+js2txt(string)+'</td>');
会好得多:
var row = $('<tr><td class="list_row">'+js2txt(string)+'</td></tr>');
或者更好的方法是创建一个具有所需结构的行,为每行克隆它,然后只替换单元格的内容。