窥探jQuery——面向JavaScript程序员(4)
作者:yangyang 发布时间:2008-06-17 14:35:00
并非天衣无缝(Leaky abstractions)
在发掘jQuery各种特性的同时,我也被某个我视之为教条(philosophical blocker)的东西所折磨着。几年来,我总是建议大家使用一种JavaScript库,前提是你们愿意梳理它的源码,并把它的工作原理彻底搞懂。我发出如此论调,是基于Joel Spolsky的不健全抽象的法则(译注[4])。在那篇文章中,Joel指出,API把复杂性隐藏的越多,当它出现无法应付的意外时,你越有可能遭遇更多的麻烦。浏览器平台是不健全抽象的最佳代表,所以当库无法帮你摆脱困境时,你要自寻解药。保持警觉非常重要。
jQuery 使用了相当不可思议的技术,以求实现它所设想的各种功能——其中一些(比如选择器的代码)真是震天骇地。如果有必要彻底搞懂一个库的工作原理,那么对大多数开发人员来说,jQuery不会是上佳之选。然而,jQuery拥有极高的人气,并且没有太多与之相关的恐怖经典流于街巷(译注:原文是a distinct lack of horror stories,比如微软Win95的“蓝屏”就是恐怖经典:),所以具体到jQuery所用技艺的邪正之分,也就变得不那么重要了。
我想,我必须重新审视曾给大家的建议。库的运作机制并不是问题焦点:关键是应看清更具普遍性的潜在问题,知晓浏览器之间的差别,以及你使用库的哪种技术,来消除差别造成的负面影响。没有哪种库可以一劳永逸地帮你克服浏览器的古怪行为。但只要你对应付潜在问题训练有素,便可把握经脉,指出问题的源头——无论它们来自你自己编写的代码,还是库或者应付策略本身。
结语(To conclude)
我费了那么多口舌,希望能让大家明白,jQuery不只是又一个JavaScript库那么简单——它蕴含了很多值得品味揣摩的理念,甚至能启迪那些骨灰级的JavaScript程序员。如果你不打算尝试jQuery,但仍值得去花些时间探索一下jQuery的生态体系(the jQuery ecosystem)。
Simon Willison写于2007年8月15日 凌晨2:27
译注:
[1] bookmarklet在原文中指的是一段“Insert jQuery”的JavaScript代码,由于译者使用Google Docs进行在线翻译,链接中的JS代码被编辑器屏蔽掉了,下面列出的代码可粘贴到浏览器的地址栏中执行,执行后才可以继续用示例代码查看jQuery的选取效果:
javascript:void(function(){var s=document.createElement('script');s.src='http://code.jquery.com/jquery-1.1.2.js';document.getElementsByTagName('head')[0].appendChild(s);}())
[2] 本文使用的术语“链盒”,大抵可对应单词chain/chaining/chainable;译者在参考jQuery Magazine issue 1对jQuery 选择器运行方式的图解后,确定了这种译法。汉字是象形文字,按“盒”字的构造来体会jQuery颇有意趣:比如上面的“人”字,不正是选择器“吐出”特定元素的“嘴”吗?而“人”字下面“一”“口”“皿”的逐层累积,其形状又类似jQuery的Logo,并让人联想到链式选取过程中不同的元素集合;“盒” 即是“桶”(bucket),译者自以为绝妙!
[3] IBM developerWorks中国的官方翻译版本《使用jQuery简化Ajax开发》;译言版本分1、2两部分,由令狐葱翻译。
[4] Law of Leaky Abstractions: All non-trivial abstractions, to some degree, are leaky. 详细解读请见原文。
猜你喜欢
- 我们大家都知道CSS功能的强大,而有关CSS基本的排版控制虽然已有详细的使用说明和参考教程,但还有许多丰富的CSS排版能力,是很少能查到的。
- 导言:本文一步一步手把手教你打造一个极酷的三层分离的标准滑动门导航菜单,从思路、原理、步骤,手段可谓“无所不用其极”,即便你是菜鸟,相信你看
- 人工生命—群集智能—蚁群算法js版前言(摘自网上,代码是自己想出来的)对于普通大众来说,“人工生命”、“群集智能”、“仿生机器人”等等可能是
- 1. 服务器优化优化原则:内存里的数据要比磁盘上的数据访问起来快;站数据尽可能长时间地留在内存里能减少磁盘读写活动的工作量;让索引信息留在内
- asp按关键字查询XML的问题 '-------------------------------------------------
- 在Microsoft SQL Server 2000中,用于数据存储的实用工具是数据库。数据库的物理表现是操作系统文件,即在物理上,一个数据
- 也许已经有人发现可以这样写...CSS代码部分a.info { position:
- Installing mysql (2.8.1) with native extensions /usr/local/lib/ruby/si
- 内容摘要:近年来,视频点播VOD(Video on Demand)的名字在媒体上出现得越来越多。VOD技术使人们可以根据
- 最近接触到Tencent的广告越来越多,户外广告牌和电视上都是,可以明显感觉到Tencent的扩张野心,以及对QQ品牌定位的重塑。摆脱低龄化
- 先问一个问题, 在firefox 2里,正则表达式字符"\d"全等于"[0-9]"吗?有可能你会答&
- 在实现TextStraem的时候,找到判断文件编码的代码是VBS的,但是在JScript中是没有ASC等函数的,也不能对二进制数据进行处理,
- var a = 0, b = 0;[0, 0].sort(function() {a = 1;return 0;});[0, 1].sort
- 你可能在使用MySQL过程中,各种意外导致数据库表的损坏,而且这些数据往往是最新的数据,通常不可能在备份数据中找到。本章将讲述如何检测MyS
- <input name="a" type="checkbox"
- 如果出现 automation服务器不能创建对象 解决方法:1、如果是Scripting.FileSystemObje
- icech: 在制作网页的时候,常常要遇到制作虚线表格的问题,下面的文章就能解决这个问题。方法一:作一个1X2的图。半黑半白,再利用表格作成
- 我们用session来实现这一设想。由于session是用户级的全局变量,将登录的信息记录到session中后,用户就可直接浏览这些特定的页
- 我有个MM在网上面安了家,想做一个关于特效的网站。她虽然懂一点网页制作,但是她的机器配置比较低,有时为了反复试验页面上一些特殊效果,而打开D
- 综述:本文讨论了VBScript和 JScript之间的区别,以及它们的使用场合。推荐:Vbscript5.5中文语言参考手册chm格式下载