窥探jQuery——面向JavaScript程序员

当 jQuery 在2006年1月现身时,给我的第一印象,是这玩意儿构造得很精明。基于CSS选择器(CSS selectors)来打点一切,其思路相当灵巧(参考getElementsBySelector)。但链盒工事(chaining stuff)看起来更像个噱头,并且整体看来,jQuery库提供的功能并不能覆盖所有基础性的东西。因此我断定,jQuery只会昙花一现。

几个月以来,我逐渐明白自己想错了。从技术工艺上考量,jQuery十分凌厉。它用简洁的方法,把大量常用功能封装起来,并提供精巧的插入式API,来满足标准库之外的功能模块的实现。jQuery秉持的核心,乃DOM元素的集合(译注:通常是某些子集合)——它把元素集合作为一个根本,给高度抽象出来了。最重要的,是这种遵循最佳实践的抽象,能让jQuery与其他JavaScript代码相处融洽。

很多对jQuery的介绍,都是针对设计师和初级开发人员。接下来我想说明,为什么jQuery也会吸引那些富有经验的开发人员。

名称空间(Namespacing)

编写可重用的、优秀的JavaScript代码,其关键在于对名称空间的积极把控。JavaScript只拥有单一的、全局的名称空间(即window对象),而很多程序员(以及一些库)恣意地为之添加各种东西。要知道全局变量是魔鬼!聪明的开发人员,会使用类似组件模式的技术,来尽力减少全局对象的数量。

jQuery仅向全局名称空间引入一个标记:jQuery函数/对象。其余的要么是jQuery的直接属性(译注:原文‘directy property’系笔误,应是‘direct property’),要么就是调用jQuery函数所返回的对象的方法。

那“语言升级”(language enhancements)又是什么呢?大多数库会提供映射,过滤,剥离,往往是浏览器的JavaScript引擎所缺少的那些功能。还有一些库,直接扩展了JavaScript内置的String和Array类,但这是冒险的做法。String.prototype和Array.prototype也有各自的名称空间,在其内添加的属性一旦发生冲突,所带来的风险,不亚于在全局环境下的草率大意。

在语言升级方面,jQuery提供了很多函数(功能),但每个函数都被赋给jQuery对象的属性:jQuery.each,jQuery.extend,jQuery.grep,jQuery.map,jQuery.merge以及jQuery.trim。如此一来,它们就不会跟其他代码产生冲突。

声名狼藉的$函数(The infamous $ function)

刚才我说到,jQuery是唯一被引入的全局标记,其实并不尽然:$标记作为jQuery的快捷方式,也被引入进来。庆幸的是,$的存在不会带来负面影响:如果你需要让原始的$起死回生(比如,这之前你的代码使用了Prototype),你可以调用jQuery.noConflict()来恢复它。

如果你既想拥有$的便利,又不希望jQuery跟其他同样使用了全局$函数的代码发生冲突,可遵循jQuery文档所建议的惯用方式:

(function($) {
  // 在这个函数体里,$可作为jQuery的引用
  // 很方便,对吧?
})(jQuery);

把一切都附加到$标记的做法,曾让我认为jQuery华而不实。不过,从体系的角度来审视这种设计,一切又是非常明了的——尽管我常喜欢在代码中定义自己的$快捷方式。

时间: 2024-08-27 23:38:55

窥探jQuery——面向JavaScript程序员的相关文章

JavaScript程序员应该知道的45个实用技巧

 在这篇文章中,我将分享一组JavaScript的技巧.窍门和最佳实践,这些都是JavaScript程序员应该知晓的,不管他们是使用在浏览器/引擎上,还是服务器端(SSJS--Service Side JavaScript)JavaScript解释器上 如你所知,JavaScript是世界上第一的编程语言,它是Web的语言,是移动混合应用(mobile hybrid apps)的语言(比如PhoneGap或者Appcelerator),是服务器端的语言(比如NodeJS或者Wakanda),并且

如何成为一个伟大的JavaScript程序员

遥想当年还年少的时候,我的兴趣爱好就跨越了各种不相关的领域.我喜欢数学,如同我深爱历史那样.我的目标是成为像文艺复兴时期多才多艺的伟人那样--在多个领域都有出色表现.这是一个艰巨的任务--突然之间我发现自己正面临着"样样皆通,样样稀松"的危险. 我开始考虑钻研某些领域,这样至少我还可以成为一个"精通某些领域"的人.那么我该怎么做,才能既专注于某个领域,同时又能学到软件开发所需的大量知识? 这篇文章主要概述在我 5 年工作经验的基础上,我成为优秀 JavaScript

全栈 JavaScript 程序员的崛起

JavaScript 无处不在 在以前,JavaScript程序员就是前端开发者的同义词,永远与浏览器绑在一起.但那已是昨日往事.Node.js的崛起开启了一个新纪元,从此,JavaScript 程序员可能不再是被局限于浏览器的前端开发者了. 相比其他高级程序语言,作为一名 JavaScript 程序员,你可以在更多的平台上发挥才能.但是现在让我们将目光放在两大主流领域上:浏览器和服务端. 为什么我非要在这两者中做出选择呢? 做为一名全栈 WEB 开发人员需要面对的问题 有句古话说得好:"什么都

做靠谱JavaScript程序员的应备素质

当我尝试为Cloudera招一个JavaScript程序员时,我发现这项任务相当艰巨.找到一名真正理解JavaScript的人非常困难.不 过,这也证明了一件非常简单的事情,是时侯去研究JavaScript,并成为这个领域的专家了.过去的几个月,我发现了一些天才JS程序员并尝试去录用 他们.显然他们有非常多的选择.他们被各种公司的Offer困扰着.作为一个想招他们进来的人,这让我想起了第一次互联网泡沫时侯的一些事.(我承诺给其 中一位侯选人一辆凯迪拉克,但最终没有打动他).最后他进入了另一家初创

为JavaScript程序员准备的10本免费书籍

你对你从事的职业中的各种概念掌握得越多,那你就越有优势.当你从事的是技术或者IT方面的工作时,你了解的信息越多,你的基本技 能和意识将越宽广.JavaScript就是这样一门编程语言,你需要掌握和学习的是永无止境的.它会时不时的增加或取消一些脚本,以提高网站建设质量. 一个利用JavaScript来设计网页.游戏或者其他图形的程序员应该知道并理解该编程语言所有重要方面的概念. JavaScript正在主宰这个世界,从创建一个简单的web应用到复杂的机器人,你都可以使用它.因此,很多作者和程序员把

面向Java程序员的Ajax:构建动态Java程序

ajax|程序|程序员|动态     Ajax(即异步 JavaScript 和 XML)是一种 Web 应用程序开发的手段,它采用客户端脚本与 Web 服务器交换数据.所以,不必采用会中断交互的完整页面刷新,就可以动态地更新 Web 页面. 使用 Ajax,可以创建更加丰富.更加动态的 Web 应用程序用户界面,其即时性与可用性甚至能够接近本机桌面应用程序. Ajax 不是一项技术,而更像是一个 模式 -- 一种识别和描述有用的设计技术的方式.Ajax 是新颖的,因为许多开发人员才刚刚开始知道

JavaScript程序员应该知道的45个实用技巧_javascript技巧

如你所知,JavaScript是世界上第一的编程语言,它是Web的语言,是移动混合应用(mobile hybrid apps)的语言(比如PhoneGap或者Appcelerator),是服务器端的语言(比如NodeJS或者Wakanda),并且拥有很多其他的实现.同时它也是很多新手的启蒙语言,因为它不但可以在浏览器上显示一个简单的alert信息,而且还可以用来控制一个机器人(使用nodebot,或者nodruino).掌握JavaScript并且能够写出组织规范并性能高效的代码的开发人员,已经

深入学习JavaFX脚本语言(面向Swing程序员) ---(上)

内容 比较声明式语法与过程式语法 为程序增加动态行为 学习更多的JavaFX GUI组件 关于译者 比较声明式语法和过程式语法 正像我们在前一节所看到的,JavaFX语言提供了一种声明式语法来表达结构和用户接口组件的内容.为了帮助你理解,让我们以纯过程的方式重写上面的程序,就像我们在编写Swing程序时经常做的那样: var win = new Frame(); win.title = "Hello World JavaFX"; win.width = 200; var label =

深入学习JavaFX脚本语言(面向Swing程序员) ---(下)

如果点击在ListBox中的"Pig.gif"(或者选择"Pig.gif"的RadioButton或ToggleButton),将出现下面的变化: 如果打开菜单,你将看到它也发生了同样的变化: ComboBoxes(下列选择框) JavaFX ComboBox与Swing JComboBox组件相关.我们将在上一个示例中添加两个组件来演示如何使用ComboBox.示例代码如下: