阅读本文后: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);

10-02 16:01