我正在调用一个递归函数,我希望将从递归调用中收到的错误连接回调用者。以下是我使用的代码。但是,看起来_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);
答案 0 :(得分:3)
答案已在评论中。我建议您使用以下内容
1)使用Javascript“严格”模式 - 它会使现代浏览器将此类错误转换为错误https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/Strict_mode
2)对你的脚本使用jshint - 它会阻止像http://jshint.com/
这样的错误