阅读本文后:A fresh look at javascript mixins我想将一些常用的剔除计算函数移至mixin并将其混合到需要该功能的每个视图模型中。
首先是mixin功能
var asActor = function() {
this.nrOfEmployees = ko.computed(function () {
if (this.employees())
return this.employees().length;
return 0;
}, this).extend({ throttle: 20 });
this.nrOfAddresses = ko.computed(function () {
if (this.addresses())
return this.addresses().length;
return 0;
}, this).extend({ throttle: 20 })
};
然后调用将mixin混合到目标对象原型中
asActor.call(SenderActor.prototype);
asActor.call(ReceiverActor.prototype);
我的问题似乎是这个(或在viewmodel内部设置为此的self)指向Windows对象而不是viewmodel。有任何想法吗? Javascript mixins对我来说是新手,所以我可能在这里缺少明显的东西。
最佳答案
asActor.call(SenderActor.prototype);
执行以下操作-
它调用asActor
并将SenderActor.protototype
对象作为this
传递this.nrOfEmployees = ko.computed(...)
在SenderActor.protototype
内部创建一个ko.computed
它评估在相同上下文中计算出的值this
仍指向SenderActor.protototype
取决于您是否在employees
中包含SenderActor.protototype
或它的原型链,此代码是否会产生错误。
现在,我假设这种行为不是您要瞄准的对象。
尝试在SenderActor构造函数中运行asActor.call(this);
。