javascript - 在 JavaScript 中是否有 "right"的继承方式?如果是这样,它是什么?

标签 javascript oop refactoring interface

我一直在努力学习如何向现有代码添加测试——目前正在阅读 Working Effectively With Legacy Code .我一直在尝试应用 JavaScript 中的一些原理,现在我正在尝试提取一个接口(interface)。

在寻找用 JavaScript 创建接口(interface)的过程中,我找不到很多东西——而且我发现的关于继承的内容似乎有几种不同的方式。 (有些人创建自己的基类以提供有用的方法,使继承更容易,有些人使用函数,有些人使用原型(prototype))。

什么是正确的方法?有一个用 JavaScript 提取接口(interface)的简单示例吗?

最佳答案

没有确定的正确方法,因为很多人在做很多不同的事情。有很多有用的模式。

Crockford 建议您“顺其自然”,或者以符合 javascript 原型(prototype)性质的方式编写 javascript。

当然,他继续表明 Netscape 建议的原始模型实际上已被破坏。他将其标记为“伪经典”,并指出遵循该模型所涉及的许多误导和不必要的复杂性。

他编写了“对象”函数作为补救措施(现在称为 Object.create() )。它允许一些非常强大的原型(prototype)模式。

当您必须使用遗留的 javascript 时,开发一个干净的界面并不总是那么容易,尤其是当您处理大型系统时,通常包括多个库,每个库都实现独特的样式和不同的继承模式。一般来说,我会说进行继承的“正确方法”是允许您编写一个干净的接口(interface),该接口(interface)在遗留代码的上下文中表现良好,但也允许您随着时间的推移重构和消除旧的依赖关系.

考虑到主要库模式之间的差异,我发现在我自己的工作中最成功的方法是让我的接口(interface)完全独立于库接口(interface)。如果有帮助,我会使用库或模块,但不会受其约束。这使我能够重构大量代码,逐步淘汰一些库,并将库用作可以在以后进行优化的脚手架。

沿着这些思路,我编写了受 Crockford 的寄生继承模式启发的接口(interface)。这真的是简单的胜利。

在硬币的另一面,我相信您会争论选择一个库,在您的团队中强制执行它,并遵守它的继承模式和接口(interface)约定。

关于javascript - 在 JavaScript 中是否有 "right"的继承方式?如果是这样,它是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/224345/

相关文章:

javascript - 删除类(class)添加类(class)问题

javascript - 单击按钮缩放 Canvas ?

oop - Erlang 中的进程/消息和 Smalltalk 中的对象/消息有什么区别?

java - Java 数组是类实例吗?

java - Eclipse 重构 : move method inside collaborator

javascript - jQuery 事件和函数触发器的问题

php - Zend Framework 如何优化模型?

refactoring - 如果您更改了具有针对其的单元测试的代码,则首先更改哪个?

c# - 如何使用 try-catch-finally 重构代码

javascript - 在 child 中使用 onclick