【问题标题】:What are the technical advantages of pseudoclassical inheritance over functional inheritance (factory functions)?伪经典继承相对于函数继承(工厂函数)的技术优势是什么?
【发布时间】:2018-09-20 03:16:36
【问题描述】:

替代标题:“为什么这么多流行的 JavaScript 库使用伪经典继承而不是函数继承(工厂函数)?”

JavaScript: The Good Parts 建议使用工厂函数,以便您获得方法和属性的真正隐私。这是有道理的,所以我想知道为什么这么多现代 JS 库仍然使用伪经典继承(使用 new 关键字)。与工厂功能相比,这条路线是否有一些技术优势?如果不是,那只是一种风格选择吗?

编辑:这不是基于意见的帖子。我不是在问哪个更好,我是在问伪经典继承相对于函数式继承有哪些技术优势,以了解为什么有人会选择这种风格。

编辑 2:我可以看到伪经典的几个优点:

  1. 当您console.log 原型的实例时,它会向您显示实例化对象的名称。
  2. 在相关说明中,您可以使用 instanceof 查看实例是否来自特定对象,而工厂函数无法做到这一点。

【问题讨论】:

  • 大胆猜测,也许是他们不认为隐私很重要。文档显示了打算使用的方法,如果开发人员偏离了这条路线并试图对一些原本不打算改变的东西进行猴子补丁,那就是他们。也就是说,new 关键字仍然可以实现这种隐私。
  • “我在问伪经典继承相对于函数式继承有什么技术优势”
  • @Phil 好主意,谢谢!

标签: javascript inheritance prototype


【解决方案1】:

让我们专注于您的示例。我认为不需要工厂功能,尽管由于您所说的原因它们可能是首选。例如,您可以使用显示模块模式将信息与新信息一起隐藏。

这是对该模式的合理解释的链接。 http://jargon.js.org/_glossary/REVEALING_MODULE_PATTERN.md

在这种情况下,我认为这实际上只是一种模式对另一种模式的偏好,揭示了模式与工厂。人们的信息很可能是孤立的,不同的理论在不同的地方占主导地位。你只是抓住了辩论的一部分,想知道为什么每个人都不做 X 而不是 Y,他们主要是在试图满足类似的担忧。

您会发现在静态类型语言中大量避免使用 new,因为强类型化导致依赖性变得更加令人担忧。您还将从函数式程序员、过程式编程和 OOP 中得到不同的答案。我认为 javascript 的一个有趣的方面是它把各种语言背景的人都带到了它。

我也确实认为,对于 javascript,人们更加重视组合而不是继承。 React 就是这种倡导的一个很好的例子

【讨论】:

    猜你喜欢
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    相关资源
    最近更新 更多