这么一个简单的功能
从 @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