jQuery 为什么优秀兼谈库与框架的设计[转]
2021-05-04 05:27
标签:入口 drop 需求 相关 col i++ def grunt 做什么 文章转自:https://github.com/lifesinger/blog/issues/114 从 @wintercn 的这篇文章说起:从 jQuery 谈库与框架的设计之优劣 先去读一读哦,不长的,winter 写得很幽默。 好了,看下文。 拿 winter 的代码入手: 这段代码很酷,看见了递归没?还有传说中的函数式编程!也不长,只有 166 个字符。考虑 jQuery 那庞大的 97K 代码,完全可以自己写啊,真心用不着什么类库。 可是,各位看官,在中国,有两种东西需要小心:一是 CCAV 的新闻,二是程序员的代码。你信前者就幸福了,后者嘛,请看: 尼玛,winter 坑我,复制过来的 traversal 方法工作有点不正常呀 为了节约笔墨(精彩在后面),先不说 这可不是故意挑刺,我们在讨论类库哦。上面的 修改后,正则看起来很酷。师兄下次 review 代码时,应该会觉得我技术有进步,加薪、晋升有望了…… 继续节约笔墨(精彩在后面),不说代码的优化空间。只想问呀,这么一个简单的功能,值得如此折腾吗?为何不用一行搞定: 好了,各位看官,你还同意 winter 说的 jQuery 是 “没有问题创造问题也要解决问题” 吗? 调侃结束,言归正传。jQuery 解决什么问题,jQuery 能做什么,来看官网: 云译一下: jQuery …… 让 DOM 操作简单 …… 跨浏览器 …… 翻译有直译、意译、神译,但在云时代,得用云译。诠释如下: 预测:苏宁电器会改名叫苏宁云商,但 jQuery 不会改名为 jLibrary。和 jQuery 同样专注的还有 Evernote、Amazon、Dropbox 等等牛逼的东东。 (精彩已讲完,下面可以不看。 在类库界,解决了 What,解决了定位问题后,基本上已经决定了生死存亡。 至于 How,也重要但往往不是关键。最近看 Grunt 类库,也有同感。) 命名非常重要。比如决定 winter 牛逼的,不是 1024,而是 winter 这个名字。 不过没看懂 winter 说什么,因为 winter 说的和 jQuery 没什么关系。可能跟 jQuery 的早期版本有关系,但任何事物都会有历史局限性,就如我就一直期待传送门,但不能嘲讽当代的汽车。 至于 不评论了。要谈命名,不如谈 jQuery 的方法名,简洁明了。YUI3 等类库抄得不亦乐乎,这是一种认可与致敬。 泛义上讲,完全同意 winter 的说法。我也非常讨厌一个方法职责不清、身兼数职。比如 RequireJS 里,最让我不能忍受的重要原因之一就是,天杀的 不过, 谈任何设计,都离不开场景。 jQuery 是 DOM 操作类库。jQuery 首要要解决的是: 如何高效方便地操作 DOM? 在这个真实需求下,jQuery 选择了一句话: 找到 DOM 元素,然后再操作、继续操作。 上面这句话,不是 jQuery 凭空设计出来的,而是千万前端工程师们在写代码时实际上会干的事情: 上面的代码挺不错的,但有坑。jQuery 将上面这种常见代码,通过链式操作简化成了: 这就如我们一般不会说: 而会说: 至于 getter 和 setter 的统一,可以类比: 别跟我说一定要: 不直接通过属性,而通过方法来搞定 getter 和 setter,个中缘由 winter 比我更清楚,有兴趣的可以看:defineProperty 其实上面说的跟 winter 反驳的没什么关系,winter 主要反对职责不单一。不过,职责不单一的方法,在 jQuery 里有,但并不多。至于 举例子来说说: jQuery 的专注,不三心二意, 非常有利于生态圈的形成。君不见,jQuery 社区目前就是前端界的阿里巴巴呀,winter 你来一淘了,应该认可阿里的大方向哦。反观 YUI3 等框架,不是京东又是什么呢? 最后,来点煽情的。jQuery 在我心中,是一尊女神。她温柔、细腻,她火辣、傲娇,一定会有人骂她,但真了解她的,会爱上她。 jQuery 为什么优秀兼谈库与框架的设计[转] 标签:入口 drop 需求 相关 col i++ def grunt 做什么 原文地址:https://www.cnblogs.com/jun1019/p/12116968.html解决什么问题
function traversal(node, f) {
f(node);
if(node.children.length) {
for(var i = 0; i
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...";
}
})
$( "button.continue" ).html( "Next Step..." )
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.
each
,尼玛的 Deferred
等看起来和 DOM 无关的东东,实际上跟 DOM 方法的实现很有关系,暴露出来挺有用,因此才暴露。此外,与 DOM 操作实现无关的 cookie
、localStorage
等等,jQuery 一律不提供。(注:个人觉得如果这些内部方法不暴露,只暴露与 DOM 操作相关的方法,jQuery 会更完美。注2:别跟我较真说动画和 Ajax 不是 DOM 操作。)也谈命名
$
的选择,这就如 码农
、屌丝
等词汇一样,winter 好像也经常用,并不反感。$
的选择也像 QWERT
键盘,或者系统中用 ~
表示 Home 目录一样。为什么很少见 *nix 用户不爽 ~
呢?接口设计
require
方法一会是全局方法,一会是函数变量,一会是云,一会是风……
var foo = document.getElementById("foo");
foo.setAttribute("data-bar", "bar");
foo.innerHTML = "...";
$("#foo").attr("data-bar", "bar").html("...");
我是 winter
我喜欢编码
我喜欢妹子
我是 winter,喜欢编码,也喜欢妹子。
var host = { a: "a" };
// 获取值
alert(host.a);
// 设置值
host.a = "aa";
var host = {
a: "a",
getA: function() { return this.a; },
setA: function(val) { this.a = val; }
}
$
的功能,这是入口方法,为了用户的便利性, 适当放下程序员的完美情节,个人觉得是一种 面向用户的权衡。很多产品也如此,在屌丝用户看来很糟糕,但普通用户还真喜欢,因为方便。耦合
YUI().use("node")
一下,加载过来的文件大小就超过 jQuery 了。写在最后
文章标题:jQuery 为什么优秀兼谈库与框架的设计[转]
文章链接:http://soscw.com/index.php/essay/82124.html