当前位置:首页 > Web开发 > 正文

这么一个简单的功能

2024-03-31 Web开发

从 @wintercn 的这篇文章说起:从 jQuery 谈库与框架的设计之优劣

先去读一读哦,不长的,winter 写得很幽默。

好了,看下文。

解决什么问题

拿 winter 的代码入手:

function traversal(node, f) { f(node); if(node.children.length) { for(var i = 0; i<node.children.length;i++) traversal(node.children[i],f); } } traversal(document.body,function(element){ if(element.tagName=="button" && element.className.match(/continue/)) { element.innerHTML = "Next Step..."; } })

这段代码很酷,看见了递归没?还有传说中的函数式编程!也不长,只有 166 个字符。考虑 jQuery 那复杂的 97K 代码,完全可以本身写啊,真心用不着什么类库。

可是,列位看官,在中国,有两种对象需要小心:一是 CCAV 的新闻,二是措施员的代码。你信前者就幸福了,后者嘛,请看:

尼玛,winter 坑我,复制过来的 traversal 要领事情有点不正常呀

为了节约翰墨(出色在后面),先不说 children 的坑(不说是因为 winter 恰好绕过去了),来说说下面这个:

<button class="continued">

这可不是故意挑刺,我们在讨论类库哦。上面的 button 也会被 traversal 命中。好吧,我帮 winter 改削下:

traversal(document.body,function(element){ if(element.tagName=="button" && element.className.match(/(?:^|\s)continue(?:\s|$)/)) { element.innerHTML = "Next Step..."; } })

改削后,正则看起来很酷。师兄下次 review 代码时,应该会感受我技术有进步,加薪、晋升有望了……

继续节约翰墨(出色在后面),不说代码的优化空间。只想问呀,这么一个简单的成果,值得如此折腾吗?为何不用一行搞定:

$( "button.continue" ).html( "Next Step..." )

好了,列位看官,你还同意 winter 说的 jQuery 是 “没有问题缔造问题也要解决问题” 吗?

讥讽结束,言归正传。jQuery 解决什么问题,jQuery 能做什么,来看官网:

jQuery is a fast, small, and feature-rich JavaScript library.
It makes things like HTML document traversal and manipulation,
event handling, animation, and Ajax much simpler with an easy-to-use API that works across a multitude of browsers.
With a combination of versatility and extensibility, jQuery has changed the way that millions of people write JavaScript.

云译一下:

jQuery …… 让 DOM 操纵简单 …… 跨浏览器 ……

翻译有直译、意译、神译,但在云时代,得用云译。诠释如下:

jQuery 是 DOM 操纵类库,非常专注。 这很重要很重要。正是这种 专注做小 的心态,让 jQuery 在 DOM 操纵范围所向披靡。这比野心勃勃想着做大的 Prototype、YUI、Dojo 等不知强几多呢。jQuery 的风行证明了专注的力量。找老公也可以用 jQuery 去衡量。

jQuery 真的很专注。 常见的 each,尼玛的 Deferred 等看起来和 DOM 无关的东东,实际上跟 DOM 要领的实现很有关系,袒露出来挺有用,因此才袒露。别的,与 DOM 操纵实现无关的 cookie、localStorage 等等,jQuery 一律不供给。(注:小我私家感受如果这些内部要领不袒露,只袒露与 DOM 操纵相关的要领,jQuery 会更完美。注2:别跟我较真说动画和 Ajax 不是 DOM 操纵。)

jQuery 非常存眷用户。专注于 DOM 操纵及其兼容性,让普通用户包孕设计师都可以快速写出代码,这是 jQuery 的巨大价值。

预测:苏宁电器会改名叫苏宁云商,但 jQuery 不会改名为 jLibrary。和 jQuery 同样专注的还有 Evernote、Amazon、Dropbox 等等牛逼的东东。

(出色已讲完,下面可以不看。 在类库界,解决了 What,解决了定位问题后,根基上已经决定了存亡生死。 至于 How,也重要但往往不是关键。比来看 Grunt 类库,也有同感。)

也谈定名

定名非常重要。好比决定 winter 牛逼的,不是 1024,而是 winter 这个名字。

不过没看懂 winter 说什么,因为 winter 说的和 jQuery 没什么关系。可能跟 jQuery 的早期版本有关系,但任何事物城市有历史局限性,就如我就一直等候传送门,但不能嘲笑今世的汽车。

至于 $ 的选择,这就如 码农、屌丝 等词汇一样,winter 仿佛也经常用,并不反感。$ 的选择也像 QWERT 键盘,或者系统顶用 ~ 暗示 Home 目录一样。为什么很少见 *nix 用户不爽 ~ 呢?

不评论了。要谈定名,不如谈 jQuery 的要领名,简洁明了。YUI3 等类库抄得不亦乐乎,这是一种承认与致敬。

接口设计

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32705.html