2016-03-03 133 views
0

我得到了一個帶有全局變量和方法的JavaScript類,並且一個specefic方法使得一些引用。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; 
      }, 

作爲解決方法,我必須在全局變量仍有價值的地方分配值。但我的問題是,爲什麼這些變量失去了他的價值?

+0

inputDiv'的'第二外觀是一個不同的功能,內側[其具有不同的範圍。](http://stackoverflow.com/questions/500431/what-is-the-scope-of-變量在JavaScript中) – Blazemonger

+2

'inputDiV'和'action'不是全局變量,它們是'validation'函數中的局部變量。 – Barmar

+1

你應該使用'this.inputDiv'。 – Barmar

回答

2

函數的參數列表中指定的變量始終是局部變量,而不是全局變量。所以在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; 
      }, 
+0

其實,我也這麼做。非常感謝你的解釋。現在我明白瞭如何在JavaScript上更好地使用這些變量 – CR7