0

再帰関数を呼び出していますが、再帰呼び出しから受け取ったエラーを連結して呼び出し元に戻したいと思います。以下は私が使用するコードです。ただし、_errors変数はインスタンス間で共有されているようです。この_errors変数をインスタンスに固有にするにはどうすればよいですか。

var check = require('./validator.js').check;

var QV = function() {
  this._errors = {};
}

QV.prototype.a  = function (str) { check(str).len(1,4).notNull().isInt() };
QV.prototype.b  = function (str) { check(str).len(1,4).notNull().isInt() };
QV.prototype.c  = function (str) { check(str).len(1,4).notNull().isInt() };
QV.prototype.validator = function (opt) {
    qv = new QV();
    for(var i in opt) {
        try {
          if (opt[i].toString() === '[object Object]')
          {
            var errors =  qv.validator(opt[i]);
            console.log(qv._errors); //Here the qv._errors is overwritten with the 'sub' errors. I lose the error 'a' here.
            qv._errors[i] = errors;
          }
          else
          {
            qv[i](opt[i]);
          }
        } catch (e) {
            qv._errors[i] = e;
        }
    }
    return qv._errors;
}

module.exports = QV;

そして、私はこのコードを使用して検証を行います

var test = require('./test_validator.js');
var q = new test();

msg = q.validator({
    'a' : "asdf",
    'sub' : {
        'b' : "asdf",
        'c' : "bsdf"
    }
});
console.log(msg);
4

1 に答える 1

3

答えはすでにコメントにあります。以下の方にお勧めします

1) Javascript の「厳密な」モードを使用します。これにより、最新のブラウザーがこのような間違いをエラーに変換します https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/Strict_mode

2) スクリプトに対して jshint を使用します。これにより、http://jshint.com/ のようなエラーが防止されます

于 2013-01-20T15:23:05.770 に答える