2

这很奇怪。我究竟做错了什么?

class Store extends Riot.Observable {
  trigger():void {
   // shouldn't this be completely overwriting the trigger method on riot.observable? 
   console.log("my trigger....");
  }
}

let store = new Store();
store.trigger();

预期行为:控制台中的“我的触发器....”。我得到的是 Riot.Observable 上触发器的原始实现,由于没有传递参数而导致错误。

如果我用我的实现戳store我可以看到的对象store.__proto__,那里确实有触发器。但store我自己有自己的(原始)副本trigger()

请参阅https://jsfiddle.net/sidouglas/5spbvpnn/

用一个非常基本的例子引用了这个,我不知道发生了什么。

4

1 回答 1

2

根据source,riot observables 没有利用原型继承。相反,它们作为 mixins 工作。打字稿包装类只是调用原始的 riot mixin。要覆盖函数,您必须将其分配给实例:

class Store extends Riot.Observable {
    constructor() {
        this.trigger = function() {
            console.log("My trigger");
        };
    }
}

let store = new Store();
store.trigger();
于 2016-10-12T00:18:25.640 回答