【问题标题】:enforce implementation of an interface强制实现接口
【发布时间】:2015-05-08 21:46:30
【问题描述】:

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

【问题讨论】:

    标签: javascript oop interface duck-typing


    【解决方案1】:

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

    确实有两个论点反对 OP 所指和想知道的方法。

    首先,如果能够在支持 TypeScript 的开发环境上建立项目,那篇文章中描述的技术并没有提供任何真正的好处,但是 - 如前所述 - 引入了性能问题和样板开销。

    因此,与往常一样,如何使用它们取决于项目目标、技术设置以及开发人员的技能。

    其次,这是一个相当强烈的观点,因为我不能在几行内证明它的合理性,我总是认为原生 JavaScript 不需要接口的概念,因为 ECMAScript-3 已经有一个自然的对基于角色的组合概念(如 Mixins 和 Traits)的倾向——因此讨论了以非常方便的方式实现代码重用的生产就绪行为的捆绑实现。

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

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

    http://jsfiddle.net/n8m7c3po/

    【讨论】:

    • 感谢您的回答。我对扩展的问题是我在主对象和扩展对象之间没有任何合同。例如,A 可以扩展 B,但为了工作,B 必须有一个属性名称 imageId。另一方面,A 也使用了 imageId。那么,这个 imageId 属性应该在哪里呢?这就是我寻找合同的原因。有什么建议吗?
    • 如果我理解正确你喜欢用AB 做某事,但前提是B 满足某些条件。根据(您的)代码的复杂性或它试图抽象的内容,您甚至可能不需要元编程方法来检查对象属性/方法的存在。您能否提供示例原始问题的代码然后您的问题来自于。
    猜你喜欢
    • 2013-02-19
    • 2015-10-23
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    相关资源
    最近更新 更多