繁体   English   中英

如何在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模式中受益(请参阅此简单示例 )。 您可以执行以下操作:

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 无论哪种方式,如果要添加新的公共功能,请不要忘记在模块输出中也将其公开!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM