jQuery讓開發(fā)者戀戀不舍的秘密
今年年初,jQuery發(fā)布了1.4版本,代碼也從googlecode上遷移到了github,在這個版本中,jQuery有相當(dāng)多的改進與功能更新,它不僅包含了很多新的特性,更在性能優(yōu)化方面下了很大功夫。
jQuery是本人接觸的***個JavaScript類庫,俗話說初戀總是讓人難以忘記。一年以前,這種難以忘記僅僅是一種純感覺,說不出來具體原因。從純功能上說,jQuery并沒有特別出色的地方。究竟是什么讓JavaScript開發(fā)者如此戀戀不舍呢?
51CTO推薦專題:jQuery從入門到精通
在搭建taskspeed,檢查jQuery的測試代碼時,突然明曉了一個也許大家都已知道的秘密:jQuery最出色最讓人戀戀不舍的是它的API設(shè)計。
比如dom-style的api, YUI3和MooTools等框架采用的是傳統(tǒng)方式:
- el.setStyle(prop, val);
- el.getStyle(prop);
- el.setStyles({ propA: valA, propB: valB });
- el.getStyles(propA, propB); // MooTools 支持
在jQuery里,一個CSS方法全部搞定:
- el.css(prop); // 表示 getStyle
- el.css(prop, val); // 表示 setStyle
- el.css({ propA: valA, propB: valB }); // 表示 setStyles
- el.css(prop, func); // func 是一個返回 val 值的函數(shù)
對比以上兩種API設(shè)計,乍一看jQuery顯得不那么“標(biāo)準(zhǔn)”。但從可記憶性和靈活性上講,我覺得jQuery的設(shè)計都更人性化。jQuery的API還符合學(xué)習(xí)上的漸進式思維:先學(xué)會最簡單的情況el.css(prop), 再了解到還可以有兩個參數(shù),接著發(fā)現(xiàn)參數(shù)可以是map, 更進一步發(fā)現(xiàn)val還可以是一個函數(shù)。
func參數(shù)甚至能帶給學(xué)習(xí)者一種驚喜:居然還可以這樣用!jQuery把一種漸進和愉悅帶進了學(xué)習(xí)和使用的過程中,實在漂亮!YUI3的API缺少這種樂趣。查詢jQuery的API, 會有一種探尋秘密的尋寶感覺。YUI的文檔查詢則讓人感覺就是份工作,有點boring。
和YUI2 相比,YUI3的API做了些改變。在YUI2里,YAHOO.util.Dom的方法名,嚴(yán)格以動詞開頭,雖然有些方法名長點,但總體規(guī)律性很強,可記憶性還不錯。在 YUI3 里,則出現(xiàn)了byId, elementByAxis等方式命名的方法。純粹為了省幾個字符?這種不一致性很納悶。還有一些以名詞命名的方法:ancestor, docHeight, 乍一看很難以為是方法。
YUI3的API整體還是挺不錯的,比如Node的方法命名,就非常嚴(yán)謹。ancestor也是為了對應(yīng)next, prev等命名。也就是說:Y.Dom其實已變成了內(nèi)部API, 不鼓勵用戶直接調(diào)用。
但是不知為什么,本人還是覺得jQuery的API設(shè)計高出一個層次,套用一句流行話就是:jQuery API的用戶體驗更好!
【編輯推薦】