替代标题:“为什么这么多流行的JavaScript库使用伪古典继承而不是函数继承(工厂函数)?”
JavaScript:The Good Parts 建议使用工厂功能,以使您真正拥有方法和属性的私密性。这是有道理的,所以我想知道为什么这么多现代JS库仍然使用伪经典继承(使用new
关键字)。与工厂功能相比,采用这种方法是否有一些技术优势?如果不是,那仅仅是一种风格选择吗?
编辑:这不是基于意见的帖子。我不是在问哪个更好,而是在问伪古典继承相对于功能有哪些技术优势,以便了解为什么有人会选择这种样式。
编辑2:我可以看到伪古典的几个优点:
console.log
原型实例时,它会向您显示其实例对象的名称。instanceof
来查看实例是否来自特定对象,这是工厂功能无法实现的。答案 0 :(得分:0)
让我们专注于您的示例。我认为工厂功能不是必需的,尽管由于您所说的原因它们是首选的。例如,您可以使用显示模块模式将信息与新信息一起隐藏。
这里是对该模式的合理解释的链接。 http://jargon.js.org/_glossary/REVEALING_MODULE_PATTERN.md
在这种情况下,我认为这实际上只是一种模式对另一种模式的偏爱,从而揭示了模式与工厂之间的关系。人们的信息很可能是孤立的,不同的理论在不同的地方占主导地位。您只参与了辩论的一部分,并且想知道为什么每个人都没有在X上做过Y,而是他们在努力解决类似的问题。
您会发现很多避免使用静态类型语言中的new的问题,在这些类型中,由于强类型化而使得依赖项变得更加令人担忧。从功能程序员,过程编程,OOP中,您还将获得不同的答案。我认为javascript的一个有趣方面是,它可以将各种语言背景的人都带到它。
我也确实认为,人们对javascript的关注更多是组合而不是继承。 React是这种倡导的一个很好的例子