2017-09-16 95 views
4

假设我有一个猫鼬模型m创建后挂钩

这种模式m用模式s,增加了一个方法记录的东西创建:

s.methods.log = function(s) { 
    this.theLogger(s); 
} 

theLogger必须在任何时候都可以喂,所以我在在postinit钩饲料theLogger。

这工作:

const x = await m.findOne({_id: ...}); 
x.log("something"); 

这里的问题是,这是行不通的:

const x = new m(); 
x.log("something"); // <--- theLogger is not defined. 

有什么办法挂钩的那一刻x使用new运营商创建?

回答

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);