按照J高程上说的方法,可以在Window类的构造函数内,调用Widget构造函数,这样“this.handlers = {};”执行下来就会给Window类实例增加一个属性handlers,而且是这个实例独有的,不是共享的。而Widget的pototype里的方法,还是照旧extend到Window的prototype里,每个实例共享这些方法。这样就不会出现handlers内事件翻倍的问题了
2017-04-09
Window从Widget继承来的on方法和fire方法和handlers属性都放在了Window.prototype里,也就是说Window类的实例全部共享on方法、fire方法,和handlers属性。评论里说的清空handlers属性只能解决一部分问题,但是只要页面里有多个,或者有过多个Window类的实例,就会存在handlers内保存的数据有问题的情况。《Javascript高级程序设计》里有讲到这个问题,我看到的比较合理的解决办法叫做“组合继承”,在6.3.3章节。
2017-04-09