2013-10-16 39 views
1

我有一个验证程序库,即消毒和验证字符串。 验证器函数正在将消息推送到数组“错误”,以查找他们找到的每个无效输入。如何返回一个变量,并在同一时间重置/删除它

当所有输入验证完成我收集在一个变量中的错误是这样的:

var errors = validator.getErrors(); 

// Function definition 
Validator.prototype.getErrors = function() { 
    return this._errors; 
} 

的VAR的“错误”现在将是包含0至数串元素的数组。在此之后,我正在调用一个函数来清空验证器中的错误。

validator.clearErrors(); 

// Function definition 
Validator.prototype.clearErrors = function() { 
    this._errors = []; 
} 

问:我能以某种方式重新编写getErrors()函数,这样也为空它的内部_errors变量...然后我就可以完全消除clearErrors功能?

+0

当我看着它我真的不知道为什么我有'返回此;'在clearErrors函数中。这个函数不应该真的返回任何东西。只需重置内部变量。 –

回答

5

为什么不简单呢?

Validator.prototype.getErrors = function() { 
    var r = this._errors; 
    this._errors = []; 
    return r; 
} 

但传统上,名为getXXX的功能不应该有任何副作用。清除getErrors函数中的源代码有点令人惊讶。如果你只想保留一个函数,你可以把它叫做popErrors

+0

当你解释它时,这很容易!非常好,你也提供了一些有关“良好的编码标准”和功能命名的建议! –

1

你为什么不克隆错误的数组,然后返回克隆阵列之前重置值

How do you clone an Array of Objects in Javascript?

Validator.prototype.getErrors = function() { 
    new_array = this._errors.slice(0); 
    this._errors = []; 
    return new_array; 
} 
+0

为什么克隆它?这在这里似乎没用。 –

+0

@dystroy照顾解释如何? 'var r = this._errors;'将简单地将一个数组的引用传递给另一个,所以当这个._errors改变时,'r'也会改变 – gurvinder372

+1

@gurvinder372 * this._errors = [] *不会改变现有的数组,但会创建一个新的数组,并指向* this ._errors *。前一个数组保持不变。 – Butt4cak3

相关问题