我们说我有一个猫鼬模型m
。
此模型m
是使用架构s
创建的,它添加了一种记录事物的方法:
s.methods.log = function(s) {
this.theLogger(s);
}
theLogger必须随时提供,所以我在postinit hook处提供了logger。
这有效:
const x = await m.findOne({_id: ...});
x.log("something");
这里的问题是,这不会起作用:
const x = new m();
x.log("something"); // <--- theLogger is not defined.
有没有办法勾选使用x
运算符创建new
的时刻?
答案 0 :(得分:2)
我仍然不知道这些钩子是否存在,所以我最终通过使用函数扩展模型来解决这个问题:
return ((parent) => {
function HookedModel(a, b) {
// Pre new hooks here <-----
this.constructor = parent;
parent.call(this, a, b);
// Post new hooks here <-----
}
// Copy all static functions:
for (const k in parent) {
if (parent.hasOwnProperty(k)) {
HookedModel[k] = parent[k];
}
}
HookedModel.__proto__ = parent.__proto__;
HookedModel.prototype = Object.create(parent.prototype);
HookedModel.prototype.constructor = HookedModel;
return HookedModel;
})(model);