我们有一个基于 Java 构建的 CMS,它有用于服务器端 JS 的 Mozilla Rhino。目前 JS 代码库很小,但正在不断增长。在为时已晚和代码变得一团糟之前,我想介绍一些最佳实践和编码风格。

显然,名称空间控制非常重要。但是其他最佳实践怎么样——尤其是对于 Java 程序员来说?

有帮助吗?

解决方案

以下是来自前线的一些提示:

  • 与 Java 一样,对函数使用 Doxygen/JsDoc 风格的文档块
  • 单元测试。个人喜欢JsTestDriver,因为它也可以从CI服务器自动执行。
  • 使用 JSLint。它会对糟糕的代码挑剔
  • 考虑使用 Google Closure 编译器。它会对像 JSLint 这样的代码挑剔,但它对于发现糟糕的文档块等很有帮助。
  • 确保团队中的每个人都了解闭包的工作原理。不然会引起头痛
  • 正如您提到的,命名空间非常重要,特别是如果您希望代码与其他 JS 库(var myns = myns || {};)
  • 就我个人而言,我发现使用一个提供 OOP 帮助程序(例如类等)的库。有帮助。您可以使用原型继承,但这种方式通常有点棘手。

其他提示

我会看一下 CommonJS (以前称为ServerJS)。这是一项正在进行的工作,但它们有一个标准化的模块系统,有多个实现。已经有一些有用的库写入CommonJS规范,如 Narwhal

正如 Douglas Crockford 喜欢说的那样,JavaScript 是世界上最容易被误解的编程语言。虽然很多人不知道,但是有一个 正确的 使用 JavaScript 进行编码的方式。我毫不怀疑,如果您让 Java 开发人员在了解如何编写良好的 JavaScript 之前就开始编码,您将遇到严重的麻烦。

首先要做的就是确保每个人都阅读了 Mozilla 的优秀文章 A re-introduction to JavaScript (https://developer.mozilla.org/en/a_re-introduction_to_javascript)。JavaScript 最大的问题之一是有很多方法可以完成最常见的任务,本文应该让人们达成共识。另一个重要的参考文献是 Douglas Crockford 的作品,包括 JavaScript:好的部分。

另一件令许多 Java/C++ 程序员感兴趣的事情是 JavaScript 使用 功能 作用域不是块作用域。这可能会导致一些非常棘手的问题。A List Apart 上有一篇关于这个问题的很棒的文章,名为 Binding in JavaScript。


总结上述资源中讨论的主要问题,需要学习的最关键的差异是

  • 如何使用原型继承(与基于类的继承)编写面向对象的代码
  • 如何使用闭包和 lambda
  • 如何利用动态物体的力量
  • 如何编写函数范围的代码

由于你有一个Java引擎,所以养成为JS代码编写单元测试的习惯。选择编码风格并大力应用。如果可能,请使用工具检查代码是否符合编码样式。

以下是一些可能对您有帮助的链接:

Javascript最佳实践

JavaScript Best Practices pdf file

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top