功能未定义

时间:2011-05-19 22:53:27

标签: javascript

我正在努力学习一个方法/对象返回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,但在它之外返回函数!?

3 个答案:

答案 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>');

或者更好的方法是创建一个具有所需结构的行,为每行克隆它,然后只替换单元格的内容。