【问题标题】:Porting jQuery to CoffeeScript?将 jQuery 移植到 CoffeeScript?
【发布时间】:2011-09-13 17:16:34
【问题描述】:
CoffeeScript 似乎是一种很有前途的新技术,我一定会在我的下一个项目中尝试一下。
看起来 jQuery 可以很容易地与 CoffeeScript 一起使用 - 但是将 jQuery 完全移植到 CoffeeScript 是否有意义(以与 underscore 相同的方式移植),还是只是浪费时间?
- 这样的港口有什么好处?
- 除了可能的兼容性问题 - 这是否也会导致问题(即可能在 jQuery 的纯 js 中使用的技巧在 CoffeeScript 中是不可能的?)
【问题讨论】:
标签:
jquery
porting
coffeescript
【解决方案1】:
考虑到 coffescript 只是编写 javascript 的另一种方式,所以你可以在 javascript 中做的所有事情都可以在 coffescript 中完成,反之亦然......
很明显,coffescript 的唯一优势是源代码更清晰,更易于阅读和编码。缺点是 coffescript 生成的 javascript 很可能比当前的要大得多。对于库来说什么是一个很大的问题...
因此,将一个 coffescript 版本作为文档文档供人们尝试了解 jQuery 的工作原理是很有趣的,但在主代码中使用 coffescript 并没有什么不同
【解决方案2】:
下划线只是为了展示 CoffeeScript 的强大和简洁。此外,带注释的 CoffeeScript 源代码为熟悉 CoffeeScript 的人提供了更清晰的文档。但是official version 仍然是用纯 JS 维护的,不是从 CoffeeScript 编译的。
我认为,类似地,将 jQuery 移植到 CoffeeScript 是有意义的,这样好奇的编码人员可以享受带注释的源代码,这将使库的内部工作更加清晰。 jQuery 受益于足够强大的 JavaScript 程序员的关注,我怀疑将它移植到 CoffeeScript 会带来任何改进。
不过,我很乐意看到有人这样做,前提是他们编写了具有相同行为的漂亮代码。我认为适配器必须仔细考虑的一件事是如何将命名函数(function foo())移植到未命名函数(foo = function()),因为 CoffeeScript 仅支持后者(由于在某些情况下跨浏览器不一致)和两者具有不同的作用域行为。 JavaScript 的 == 应该不是问题,因为我发现它在 jQuery 源代码中使用的唯一情况是 x != null,这可以在 CoffeeScript 中使用 x? 完成。
【解决方案3】:
更正Coffeescript 是一个Javascript 生成器。还要更正源代码可以更清晰。绝对没有什么技巧可以在 js 中完成而在 Coffeescript 中无法完成——如果需要,你可以使用纯 js——而且我不确定我是否听说过有人需要这样做.如果您想使用 Javascript,只需将表达式括在反引号中即可:
`var foo = 42`
我不同意代码“更大”。我会断言,代码中的大多数额外字节都是您无论如何都应该插入但没有插入的字节——比如在您自己的代码周围添加命名空间包装器。在某些情况下,Coffeescript 有聪明的助手,可以将常见的使用模式分解出来,这样它们就不会被一次性编码。你可以通过阅读生成的js来弄清楚这些是什么。
就优势而言,我想这很大程度上取决于您对代码的看法。我喜欢在一个类中封装一大块功能,并且讨厌基于 Javascript 原型的对象定义。在声明类和继承方面,Coffeescript 更加 Rubyish 或 Pythonesque。
我给你的建议是:1) 获取Trevor Burnham's Coffeescript book 并体验Coffeescript 在实践中的工作原理; 2)拼凑一些简单的例子来解决你的用例; 3) 熟悉语法后,看看你喜欢它。
注意:Coffeescript Google Group 是一个很好的资源,人们在那里可以快速回答问题 - 很可能有人以前遇到过令您困惑的任何事情,并会分享答案。 Trevor 在他的书中列出了一套完整的资源。 (不,我没有得到报酬给他书上的道具:)