2014-10-28 30 views
0

我從下面的函數創建了一堆新的對象。然後,從一個循環中,循環遍歷每個循環,並調用方法toggleValid()和toggleErrMsg()。在toggleErrMsg()中,如果object.errMsgStatus的值爲false,它應該將其值更改爲true,但它不會。爲什麼?'this.variable'不變?

function InputField(field, cssTarget, value, errMsg, validator) { 
    var self = this; 
    this.field = field, 
    this.cssTarget = cssTarget, 
    this.value = value, 
    this.valid = false, 
    this.errMsg = errMsg, 
    this.errMsgStatus = false, 
    this.validator = validator, 
    this.toggleErrMsg = function() { 
     if(self.valid === false && self.errMsgStatus === false) { 
      self.errMsgStatus = true; 
      renderValidationError(self, false); 
     } else { 
      self.errMsgStatus = false; 
      renderValidationError(self, true); 
     } 
    } 
    this.toggleValid = function() { 
     self.validator(); 
     if(!self.valid) { 
      self.cssTarget().addClass("inputInvalid"); 
     } else { 
      self.cssTarget().removeClass("inputInvalid"); 
     } 

    } 
} 
+0

此構造函數如何初始化以及如何這些方法叫什麼名字? – n0mercy 2014-10-28 10:08:54

回答

-2

嘗試

function InputField(field, cssTarget, value, errMsg, validator) { 
    var self = this; 
    self.field = field, 
    self.cssTarget = cssTarget, 
    self.value = value, 
    self.valid = false, 
    self.errMsg = errMsg, 
    self.errMsgStatus = false, 
    self.validator = validator, 
    this.toggleErrMsg = function() { 
     if(self.valid === false && self.errMsgStatus === false) { 
      self.errMsgStatus = true; 
      renderValidationError(self, false); 
     } else { 
      self.errMsgStatus = false; 
      renderValidationError(self, true); 
     } 
    } 
    this.toggleValid = function() { 
     self.validator(); 
     if(!self.valid) { 
      self.cssTarget().addClass("inputInvalid"); 
     } else { 
      self.cssTarget().removeClass("inputInvalid"); 
     } 

    } 
} 
+0

這是不正確的,你重寫外部作用域自變量,它的目的是這樣 – n0mercy 2014-10-28 10:07:59

+0

@ n0mercy你是對的 – 2014-10-28 10:09:29

+0

你的第二次編輯不會改變任何事情從OP問題。在這種情況下對這一點和自我的評價是一樣的 – n0mercy 2014-10-28 10:21:03

0

這可能會與你initialiaze InputField的方式做。 由於沒有代碼,但只要你是可能做

var inputField = InputField(); 

,而應該是

var inputField = new InputField();