强制执行接口

时间:2015-03-07 09:04:18

标签: javascript oop interface duck-typing

我看到有关鸭子打字的文章:http://jscriptpatterns.blogspot.co.il/2013/01/javascript-interfaces.html?view=sidebar 我开始怀疑这种方法是否有效 在我有很多具有继承和接口关系的对象的情况下,ensureImplements()方法将被多次调用。
我很想知道是否有更好的方法来强制实现接口。

1 个答案:

答案 0 :(得分:0)

  

我开始怀疑这种方法是否有效。

确实存在两种反对OP所指及的方法的论据。

首先,如果能够在支持开发环境的TypeScript上设置项目,那么该文章中描述的技术不会带来任何实际好处,但是 - 如前所述 - 会引入性能问题和样板开销。

因此,一如既往,利用它们取决于项目目标是什么,技术设置是什么以及开发人员的熟练程度。

其次,这是一个强烈的意见,因为我不能在几行内证明它,我总是会争辩说原生JavaScript不需要接口的概念,因为ECMAScript-3已经很自然了基于角色的组合概念(如Mixins和Traits)的易感性 - 因此讨论了生产就绪行为的捆绑实现,以非常方便的方式实现代码重用。

利用Flight Mixins Angus Croll - 2011年5月)或通过逐步将属性从一个对象复制到另一个对象来实现Mixins的许多extends方法更加接近实用的日常编码。

但是如果涉及到基于Mixin / Trait的组合环境中OP问题的»强制实现«部分,则需要一个自定义Requiring Mixin,作为一个基于纯函数的实现,可能看起来像下面的精简示例代码...

http://jsfiddle.net/n8m7c3po/