Javascript类上的全局变量值丢失

Javascript类上的全局变量值丢失,javascript,class,scope,Javascript,Class,Scope,我得到了一个包含全局变量和方法的javascript类,一个specefic方法进行了一些扩展 DOOM = (function () { /** Class VALIDATIONS **/ var validation = function (form, inputDiv, action) { this.form = form; this.inputDiv = inputDiv; // -- This Variable this.action = action; //

我得到了一个包含全局变量和方法的javascript类,一个specefic方法进行了一些扩展

DOOM = (function () {
/** Class VALIDATIONS **/
var validation = function (form, inputDiv, action) {
    this.form = form;
    this.inputDiv = inputDiv; // -- This Variable
    this.action = action; // -- And This Variable
};
validation.prototype = {
    validate: function (rules, messages) {
        this.rules = rules;
        this.messages = messages;

        console.log(inputDiv);  // -- here still have value
        console.log(inputDiv);  

       $(this.form).validate({
            rules: this.rules,
            messages: this.messages,
            submitHandler: function(form){

                var getDom = new DOOM.DOM();
                var data = getDom.buildJSONValuesByJSON(getDom.buildJSONObjByForm(inputDiv)); // -- But here, already haven't value

                var sendData = new DOOM.callAJAX(action);
                sendData.start(data);

                console.log('[submitHandler] = '+ data);
                return false; 
            },

作为解决方法,我必须在全局变量仍然有值的地方赋值。但我的问题是,为什么这些变量丢失了他的值?

函数的参数列表中命名的变量总是局部变量,而不是全局变量。因此在
validation()
构造函数中,
inputDiv
是一个局部变量。如果您在
validation.prototype.validate()
中执行
console.log(inputDiv)
操作时看到某些内容,则它必须来自您发布的代码之外声明的其他变量

要访问方法中提供给构造函数的
inputDiv
,需要使用
this.inputDiv

validation.prototype = {
    validate: function (rules, messages) {
        this.rules = rules;
        this.messages = messages;

        var inputDiv = this.inputDiv;

        console.log(inputDiv);

       $(this.form).validate({
            rules: this.rules,
            messages: this.messages,
            submitHandler: function(form){

                var getDom = new DOOM.DOM();
                var data = getDom.buildJSONValuesByJSON(getDom.buildJSONObjByForm(inputDiv));

                var sendData = new DOOM.callAJAX(action);
                sendData.start(data);

                console.log('[submitHandler] = '+ data);
                return false; 
            },

函数的参数列表中命名的变量始终是局部变量,而不是全局变量。因此在
validation()
构造函数中,
inputDiv
是一个局部变量。如果您在
validation.prototype.validate()
中执行
console.log(inputDiv)
操作时看到某些内容,则它必须来自您发布的代码之外声明的其他变量

要访问方法中提供给构造函数的
inputDiv
,需要使用
this.inputDiv

validation.prototype = {
    validate: function (rules, messages) {
        this.rules = rules;
        this.messages = messages;

        var inputDiv = this.inputDiv;

        console.log(inputDiv);

       $(this.form).validate({
            rules: this.rules,
            messages: this.messages,
            submitHandler: function(form){

                var getDom = new DOOM.DOM();
                var data = getDom.buildJSONValuesByJSON(getDom.buildJSONObjByForm(inputDiv));

                var sendData = new DOOM.callAJAX(action);
                sendData.start(data);

                console.log('[submitHandler] = '+ data);
                return false; 
            },

inputDiv
的第二个外观在不同的函数中,
inputDiv
action
不是全局变量,它们是
validation
函数中的局部变量。您应该使用
this.inputDiv
@Blazemonger那么,我不能使用该变量吗?因为范围不允许it@Barmar是的,我这样做了,
inputDiv
的第二次出现在一个不同的函数中,
inputDiv
action
不是全局变量,它们是
validation
函数中的局部变量。您应该使用
this.inputDiv
@Blazemonger,我不能用那个变量吗?因为范围不允许it@Barmar是的,我是那样做的事实上,我喜欢那样。非常感谢你的解释。现在我明白了这些变量在Javascript上如何更好地工作了。事实上,我喜欢这样。非常感谢你的解释。现在我了解了如何在javascript上更好地使用这些变量