如何从 javascript 中的另一个方法调用一个方法?
How to call one method from another method in javascript?
我想知道我在 'datevalidate' 方法 中 为 'Deval' 和 'Reval' 变量赋值的方式是否是正确吗?
如果您注意到我的代码,我会通过指定指向方法的整个链来分配值,例如“x9.validator.check_element_val()”。我可以打一个不太明确的电话吗?由于我试图访问这些变量的直接词法范围之外的函数,有没有什么方法可以使用闭包来更好地处理这个?
如果闭包不适用于当前场景,请纠正我对闭包的理解。
var x9 = {} || x9;
x9.validator = {
mode : 1,
check_element_val : function(el){
var returnval = 0;
if (el.value == 0 || el.value == undefined || el.value == null || el.value == ''){
returnval = 0;
}else{
returnval = 1;
}
return returnval;
},
datevalidate : function(mode, dep_el, ret_el){
var returnobj = new Object();
if (mode == 1){
Deval = x9.validator.check_element_val(dep_el);
Reval = x9.validator.check_element_val(ret_el);
if (Deval == 0 || Reval == 0){
returnobj.returnval = false;
}else{
returnobj.returnval = true;
}
}
return JSON.stringify(returnobj);
}
};
提前致谢。
也许您会受益于 Module pattern (see this simple example)。你可以这样做:
var x9 = {} || x9;
x9.validator = (function() {
var mode = 1;
var check_element_val = function(el){
var returnval = 0;
if (el.value == 0 || el.value == undefined || el.value == null || el.value == ''){
returnval = 0;
}else{
returnval = 1;
}
return returnval;
};
var datevalidate = function(mode, dep_el, ret_el){
var returnobj = new Object();
if (mode == 1){
Deval = check_element_val(dep_el);
Reval = check_element_val(ret_el);
if (Deval == 0 || Reval == 0){
returnobj.returnval = false;
}else{
returnobj.returnval = true;
}
}
return JSON.stringify(returnobj);
}
return {
mode : mode,
check_element_val : check_element_val,
datevalidate : datevalidate
};
})();
附带说明一下,我不确定您尝试使用 mode
变量做什么,但请注意 datevalidate
函数不会使用它,除非您提供它你自己作为一个论点,例如:
var validation = x9.validator.datevalidate(x9.validator.mode,someValue1,someValue2);
如果您希望函数仅使用验证器中的 mode
变量,请从参数列表中删除 mode
。但是,如果你想保留提供不同模式的能力,你可以编写一个额外的函数。例如:
var datevalidate_default_mode = function(dep_el,ret_el) {
return datevalidate(mode, dep_el, ret_el);
};
我认为它比每次要使用默认值时都将 x9.validator.mode
添加到 datevalidate
函数看起来更好。这样你甚至可以从模块输出中删除 mode
。无论哪种方式,如果您要添加新的 public 函数,也不要忘记在模块输出中公开它!
我想知道我在 'datevalidate' 方法 中 为 'Deval' 和 'Reval' 变量赋值的方式是否是正确吗?
如果您注意到我的代码,我会通过指定指向方法的整个链来分配值,例如“x9.validator.check_element_val()”。我可以打一个不太明确的电话吗?由于我试图访问这些变量的直接词法范围之外的函数,有没有什么方法可以使用闭包来更好地处理这个?
如果闭包不适用于当前场景,请纠正我对闭包的理解。
var x9 = {} || x9;
x9.validator = {
mode : 1,
check_element_val : function(el){
var returnval = 0;
if (el.value == 0 || el.value == undefined || el.value == null || el.value == ''){
returnval = 0;
}else{
returnval = 1;
}
return returnval;
},
datevalidate : function(mode, dep_el, ret_el){
var returnobj = new Object();
if (mode == 1){
Deval = x9.validator.check_element_val(dep_el);
Reval = x9.validator.check_element_val(ret_el);
if (Deval == 0 || Reval == 0){
returnobj.returnval = false;
}else{
returnobj.returnval = true;
}
}
return JSON.stringify(returnobj);
}
};
提前致谢。
也许您会受益于 Module pattern (see this simple example)。你可以这样做:
var x9 = {} || x9;
x9.validator = (function() {
var mode = 1;
var check_element_val = function(el){
var returnval = 0;
if (el.value == 0 || el.value == undefined || el.value == null || el.value == ''){
returnval = 0;
}else{
returnval = 1;
}
return returnval;
};
var datevalidate = function(mode, dep_el, ret_el){
var returnobj = new Object();
if (mode == 1){
Deval = check_element_val(dep_el);
Reval = check_element_val(ret_el);
if (Deval == 0 || Reval == 0){
returnobj.returnval = false;
}else{
returnobj.returnval = true;
}
}
return JSON.stringify(returnobj);
}
return {
mode : mode,
check_element_val : check_element_val,
datevalidate : datevalidate
};
})();
附带说明一下,我不确定您尝试使用 mode
变量做什么,但请注意 datevalidate
函数不会使用它,除非您提供它你自己作为一个论点,例如:
var validation = x9.validator.datevalidate(x9.validator.mode,someValue1,someValue2);
如果您希望函数仅使用验证器中的 mode
变量,请从参数列表中删除 mode
。但是,如果你想保留提供不同模式的能力,你可以编写一个额外的函数。例如:
var datevalidate_default_mode = function(dep_el,ret_el) {
return datevalidate(mode, dep_el, ret_el);
};
我认为它比每次要使用默认值时都将 x9.validator.mode
添加到 datevalidate
函数看起来更好。这样你甚至可以从模块输出中删除 mode
。无论哪种方式,如果您要添加新的 public 函数,也不要忘记在模块输出中公开它!