【问题标题】:Global variables values on Javascript Class are lostJavascript 类上的全局变量值丢失
【发布时间】:2016-03-03 19:12:43
【问题描述】:

我有一个带有全局变量和方法的 javascript 类,而一个特定的方法会产生一些额外的影响。

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; 
            },

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

【问题讨论】:

  • inputDiv 的第二次出现在另一个函数中,which has a different scope.
  • inputDiVaction 不是全局变量,它们是 validation 函数中的局部变量。
  • 你应该使用this.inputDiv
  • @Blazemonger 那么,我不能使用那个变量吗?因为范围不允许
  • @Barmar 是的,我就是这样做的

标签: javascript class scope


【解决方案1】:

在函数的参数列表中命名的变量总是局部变量,而不是全局变量。所以在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; 
            },

【讨论】:

  • 其实我就是这么喜欢的。非常感谢您的解释。现在我了解这些变量在 javascript 上的效果如何更好
猜你喜欢
  • 2012-07-30
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
相关资源
最近更新 更多