适合 JavaScript 库作者的规则
这是 Dean Edwards 在一个月前写在他的 blog 上的一篇文章。我正在学 JavaScript,也许要用到一个 JavaScript 库,这些规则刚好从侧面教我分析那些作者的做法,不至于面对许多库茫然无措,因此翻译过来共勉
PS: 原文有很多外部链接,推荐去看看
http://dean.edwards.name/weblog/2007/03/rules/
适合 JavaScript 库作者的规则
大约六个月之前,我在 base2 的工作启动前写了此文。当时我决定先不发布,因为我认为它听起来有点华而不实。经再三思量,这些规则还不坏,并且我最终保留下来。因此在这里献上我在十月份为自己写的规则。
- 不乱入(Be unobtrusive; hlb 的台式翻译XD)
我的 HTML 不应该去适应你的 JavaScript。 - 禁止 Object.prototype
这条相当重要,所以需要一条完全针对它的规则。对象是构建 JavaScript 功能的基础积木,别胡乱摆弄。 - 不要过分扩展
你对 JavaScript 内建对象的扩展越少越好。别理解错,原生 JavaScript 对象的有用的方法是有点少,你会感到被迫增加一两条你自己的,但是“一两条”对于创造性的(库)程序员来说是不够的。就此停手吧,加你需要的就好。你对 JavaScript 内建对象的扩展越少,你和其它库的冲突越少。 - 跟随标准
作为一个库的作者,你在定义 JavaScript 代码的模式。在程序设计语言中模式是虚弱的征兆。记住,JavaScript 和文档对象模型在频繁更新,如果你正要“修正”某处,那么注意看看它是否还没被修正。考虑现成的解决方法,如果你跟随标准,就紧随它们(举例来说:别遗漏 forEach 方法的参数) - 或者跟随主导
Mozilla 主导 JavaScript。这门语言的创造者 Brendan Eich,不断在发展它,新的语言特征在 Mozilla 浏览器中比任何其它浏览器更早可用。如果你要增加语言特征到 JavaScript,那么首先关注 Mozilla 标准。例如:如果你想要扩展 Array 来允许一个枚举方法,那就调用 forEach 方法来代替 each。如果你确实提供缺少的语言特征,那么紧随已存在的标准(见上文)。 - 灵活可塑
如果我要修改行为而不改变你的库的源码呢?那有多容易?不够容易的话,做得更容易些。 - 管理内存
人们担心内存泄露,尽力为之。 - 摆脱浏览器嗅探
貌似浏览器厂商将永远通过添加新的特性来竞争。
作为一个库的作者,你必须跟得上最入潮的流行。偶尔浏览 Ajaxian 可不够好,你必须奴隶般地读每一个 blog 来寻找下一个 hack。浏览器嗅探会上瘾的。 - 轻量级的更好
JavaScript 库已经成熟,其中一些使主流网站得以运作。但是我们不都在用 2MB 的 DSL 线路,所以让你的库保持苗条。然而更好的是,提供一个允许我依我所需有效率地创建库的构造页面。 - 第十条规则
你可以一直依靠第十条规则,这条规则就是:可预料的。我应该可以猜得出你的方法是做什么的,并且如果我不知道一个方法叫做什么,我应该也可以猜得出。 - 附赠规则
- 文档,让人讨厌但这是真的
- 你用了越多的名字空间,我越不可能记住你的电话号码
- 记住,可能有数百万的人们会执行你的代码
记上一笔,base2 没有改变任何原生的 JavaScript 对象。
长见识了
JavaScript 很复杂啊!