我有以下inputModel:
var UserCreateInputModel = function(req) {
...
this.password = req.body.password;
this.repeatPassword = req.body.repeatPassword;
...
console.log(this.password !== this.repeatPassword);
this.validate();
};
UserCreateInputModel.prototype = InputModel;
UserCreateInputModel.prototype.validate = function() {
console.log('Validating...');
if(this.password !== this.repeatPassword) throw new Error('Passwords are not equal!');
};
module.exports = UserCreateInputModel;
在我的测试中,我想测试是否抛出了异常(使用node&#39s的断言模块):
//Act
assert.throws(function() {
new UserCreateInputModel(req);
}, Error);
不知何故,异常没有被抛出。我从构造函数输出的控制台是"这个"。 在控制台上,我没有看到输出"验证"。
我想这是一些JavaScript陷阱或者类似的东西(关于这个)但是我没有得到错误...
更新
我在另一个文件中有另一个inputModel。这个"继承"来自InputModel
。因此,似乎UserCreateInputModel.prototype.validate
在其他inputModel中被覆盖。仍然没有得到它......
答案 0 :(得分:0)
这一行:
UserCreateInputModel.prototype.validate = function() {
console.log('Validating...');
if(this.password !== this.repeatPassword) throw new Error('Passwords are not equal!');
};
正在修改InputModel
对象。如果你有两种不同的类型"继承"从InputModel
开始,你拥有validate
种方法,然后一种方法覆盖另一方。
要从InputModel
正确继承,请使用Object.create()
:
UserCreateInputModel.prototype = Object.create(InputModel.prototype);
然后从子构造函数中调用父构造函数:
var UserCreateInputModel = function(req) {
InputModel.call(this, <arguments>);
这样,当您修改UserCreateInputModel.prototype
时,您仅正在修改UserCreateInputModel.prototype
而不是其他任何内容。
答案 1 :(得分:0)
UserCreateInputModel.prototype = InputModel
不是你继承的方式。谁教你这个??? !!!
它&#39; S:
util.inherits(UserCreateInputModel, InputModel)
(其中util
为require('util')
)和InputModel.apply(this, arguments);
或InputModel.call(this, <explicit list of input model ctr args>)
。如果仍然存在,请回复另一个编辑。