1

文字列をサニタイズして検証するバリデータ ライブラリがあります。バリデーター関数は、検出された無効な入力ごとにメッセージを配列「エラー」にプッシュしています。

すべての入力の検証が完了したら、次のような変数にエラーを収集します。

var errors = validator.getErrors();

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

var "errors" は、0 からいくつかの文字列要素を含む配列になります。この直後に、バリデーターのエラーを空にする関数を呼び出しています。

validator.clearErrors();

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

質問:どうにかして getErrors() 関数を書き直して、内部の _errors 変数も空にすることはできますか?... その後、clearErrors 関数を完全に削除できます。

4

2 に答える 2

5

なぜこれだけではないのですか?

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

しかし慣習的に、命名された関数getXXXには副作用があってはなりません。関数内のソースをクリアするのgetErrorsは少し驚くべきことです。popErrors関数を 1 つだけ保持する場合は、たとえば次のように呼び出します。

于 2013-10-16T08:19:32.633 に答える
1

エラーの配列を複製してから、複製した配列の値を返す前にそれをリセットしてみませんか?

Javascriptでオブジェクトの配列をどのように複製しますか?

Validator.prototype.getErrors = function () {
    new_array = this._errors.slice(0);
    this._errors = [];
    return new_array;
}
于 2013-10-16T08:22:32.600 に答える