Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数未定义_Javascript - Fatal编程技术网

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