如何从 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 函数,也不要忘记在模块输出中公开它!