Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

基于 Decorator 的事件封装

  JavaScript 的原型继承模式无法实现多重继承,在一个构造器上要实现多个辅助功能就无法完美地通过原型继承来实现。比如给一个类添加事件相关的功能,传统的做法是直接写一个事件实现的基类注入到目标构造器的原形链中。但是目标构造器已经有了别的原形链,无法注入其他原型。
  无法通过继承来实现也无妨,我们会把事件绑定直接在构造器中做,并且以 apply 的形式提供给其他构造器。
function Event() {
  // ...
}

function A() {
  Event.apply(this, arguments);
}
  这么做的一个缺陷是无法通过 instanceof 计算出是否继承自 Event,但这已经可以满足我的大部分需求了。(其实是我不知道怎么完美解决这个问题,只能这样勉强实现,如果大家有什么好的实现方式欢迎推荐!)
  用着用着我就觉得,在其他构造器中都写一个 apply 这件事实在是太恶心了。不过一直没什么更好的方案,所以就这么用着。
  最近在一些项目中用上了 Decorator,感觉它可以解决一些问题。至少可以解决在每次使用时都写个 apply 的问题。
function Event(Base) {
  return function() {
    // ...
    Base.apply(this, arguments);
  }
}

@Event class A () {}
  而且这个 Event 根本就不是以继承的形式注入到类中,而是装饰器的形式,所以也不用考虑 instanceof 的问题(它理所当然地就是 false)。
  虽然这个用法也不怎么美,但满足一般装逼需求还是合格的。
网名:
34.203.213.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^