精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從jQuery談庫與框架的設計之優劣

開發 架構
jQuery是業內知名的javascript框架,它的實現和設計可以說代表了javascript界最高的水平,本文試從四個方面來以jQuery為例總結庫與框架設計的原則和優劣判斷。

jQuery是業內知名的javascript框架,它的實現和設計可以說代表了javascript界***的水平,本文試從四個方面來以jQuery為例總結庫與框架設計的原則和優劣判斷。

解決問題

首先請看一個我實現的框架,我把這個庫稱為四則運算。

  1. function add(a,b) {  
  2.     return a+b;  
  3. }  
  4. function mul(a,b) {  
  5.     return a*b;  
  6. }  
  7. function minus(a,b) {  
  8.     return a-b;  
  9. }  
  10. function div(a,b) {  
  11.     return a/b;  

這個庫的API簡潔優美,實現的更是優雅無比,它把四則運算統一成了函數形式,使得我們的開發更加方便。***大的是,這個做法使得四則運算支持函數式編程,比如:

  1. function acc(a,b,f) {  
  2.     var jieguo = a; //http://weibo.com/2178807082/zk1kOcMPU  
  3.     for(var i = 1; i<b; i++) {  
  4.         jieguo = f(jieguo,a);  
  5.     }  
  6.     return jieguo  
  7.  
  8. }  
  9.  

這樣,通過acc函數,我們可以輕易實現n次方運算,這正是函數式編程之美。

舉這個例子是為了告訴大家,一個框架/庫其實可以不需要解決任何問題——只要你會亂用概念、自吹和哄騙新手就夠了。

下面我們來看看一個非常成功的框架——jQuery解決的問題,讓我們來看看jQuery首頁的"Brief Look"中給出的***個例子。

  1. DOM Traversal and Manipulation  
  2. $( "button.continue" ).html( "Next Step..." ) 

嗯,沒錯,jQuery希望幫助我們解決遍歷DOM的問題,如果沒有jQuery,我們大概要寫一個traversal函數了。

  1. function traversal(node, f) {  
  2.     f(node);  
  3.     if(node.children.length) {  
  4.         for(var i = 0; i<node.children.length;i++)  
  5.             traversal(node.children[i],f);  
  6.     }  
  7. }  
  8.  
  9. traversal(document.body,function(element){  
  10.     if(element.tagName=="button" && element.className.match(/continue/)) {  
  11.         element.innerHTML = "Next Step...";  
  12.     }  
  13. }) 

traversal這個函數真的是超麻煩不是么?竟然有175個字符呢!使用起來也有166個字符,用了jQuery之后,只要45個字符就可以搞定呢!好神奇!

好吧原諒我剛才把思維模式切換到了"write less, do more"模式,jQuery正是通過一個字符一個字符地節約程序員的工作量來達到這一偉大目標的。

壓縮后仍達97k的jQuery竟然幫助我們少寫了這么多代碼,好神奇啊啊啊!這正是庫/框架設計的要點,那就是"沒有問題創造問題也要解決問題!"

命名

命名問題對于庫/框架來說,尤其重要。

總的來說,如同正統程序員那樣追求命名的易讀、易懂、與原生一致的話,你的庫/框架不會有任何出彩的地方。

好的庫/框架,命名有幾個原則,***個原則,就是要有厚重的歷史感。

在80年代,因為C語言支持的變量名最長為8字節,聰明的程序員們使用了一種縮寫方式,保留發音的輕輔音字母,省略元音字母和部分濁輔音字母。

比如:

  • button=>btn
  • text=>txt
  • search=>srch
  • fuck=>fk
  • click=>clk
  • double=>db

沒錯,這樣雖然省略了字母,但是英文好的人仍然可以讀出單詞來,而現在,雖然我們完全沒有這種需要,我們也可以為了給新人以距離感和絕對的震懾而使用這種命名。

還有一種歷史上的命名方式:匈牙利命名。

匈牙利命名使用簡寫的類型作為變量的前綴,比如

  • iCount表示int類型的count
  • szText表示字符串類型的text
  • bIsNumber表示布爾類型isNumber
  • dRate表示表示雙精度浮點類型rate

是不是看上去很酷?值得一提的是,sz表示以0結尾的字符串,這是C語言中字符串的實現方式,JS中完全不是這樣實現的字符串,所以這樣用可以大大提升你在新手中的地位,他們做夢也猜不到sz是字符串的意思。

另外,其實js是弱類型語言,變量根本就跟類型不是綁定的。

除了歷史之外,特殊符號也是我們的***,在javascript中,$美元符號和_下劃線是非常棒的選擇。這當中的代表作當屬jQuery和underscore.

jQuery的$使用也并非原創,先行者是prototype.js,這也讓jQuery的做法具有相當厚重的歷史感。同時,美元符號比下劃線強的地方是,美元符號還具有吉祥如意的寓意,咱們寫代碼的,出來不就是混口飯吃,如果代碼經常出現美元,一定會給我們帶來很多財運的。

占領這些特殊符號可以讓別的框架無符號可用,當年jQuery和prototype.js爭霸之時,jQuery就被迫搞出來了 noconflict——盡管基本沒見過有人用過,畢竟要把滿篇的$改成jQuery還是頗費體力的,多數人會選擇放棄一個庫。(什么你說根本不需要替換?直接在外面套個閉包就能解決問題?醒醒吧親,能同時用倆帶$庫的工程師怎么可能會那種高級玩意兒啊,人家都是實踐派好吧?)

不過大家不要傷心,雖然沒有了$和_可以搶,ES5為我們帶來了更多奇形怪狀的、鍵盤輕易都輸入不來的標示符可用字符。我首先要推薦的是兩個零寬字符<zwnj>和<zwj>,這倆字符一個是連接符,一個是非連接符,它們的厲害之處在于,不可見,通過這倆字符,你可以制造出假的$來。

請看以下代碼:

var $ = 1;

估計你做夢也想不到這變量其實是$\u200D(<zwj>)吧......

通過\u200D和\u200C的組合,可以制造神奇的代碼出來,你的用戶一定會交口稱贊你的魔法代碼的!

不止如此!更多奇怪的字符等你挖掘!

接口設計

除了命名,接口設計也是框架的核心之一。

那些平庸的框架會用"單一職責"原則來設計接口:不論是類還是函數,一個只做一件事,而且跟命名 中所說的完全一致。

Noooooooooooo ! 這也太無趣了!

我們來看看jQuery的$有多少種用法!摘自官方文檔:

  • jQuery( selector [, context ] )
  • jQuery( element )
  • jQuery( elementArray )
  • jQuery( object )
  • jQuery( jQuery object )
  • jQuery()
  • jQuery( html [, ownerDocument ] )
  • jQuery( html, attributes )
  • jQuery( callback )

沒錯!這個函數(jQuery就是)居然有9種重載!而且重載中最少包含了3種毫不相干的使用方法!一段時間里,我曾經在面試中問所有聲稱自己熟悉jQuery的面試者這個函數有多少種用法,可以答上三種以上的僅有1人,而沒有人答出來過超過5種!

可以說,$在jQuery使用者的眼里就是一個神!你能想到的事情它都能做!在可以預見的將來,相信jQuery會結合人工智能,做到不論你想實現任何功能,都只需要寫同樣的代碼:

  1. $(); 

怎么樣,看清楚接口設計的原則了么?那就是:盡量把功能加到以前的接口上,通過加參數、區分參數類型來添加功能,不論它們有沒有聯系,也不論API的名稱是什么!哦...... 對了這個應該結合上文提到的命名,請使用沒有任何意義的魔法變量名!

耦合

你可能常常聽到一些舊時代的程序員講,程序必須"高內聚、低耦合"。然而,這個說法具有極大的誤導性。

我們先來看看jQuery的事件綁定:

  1. var hiddenBox = $( "#banner-message" );  
  2. $( "#button-container button" ).on( "click"function( event ) {  
  3.   hiddenBox.show();  
  4. });  
  5.  
  6. 假如我不想使用選擇器,只想要綁定事件到一個DOM元素上怎么辦呢?答案是,你要首先把他變成一個jQuery對象才行  
  7.  
  8. $(document.querySelector("#button-container button")).on( "click"function( event ) {  
  9.   hiddenBox.show();  
  10. }); 

接下來我們來看jQuery的ajax部分:

  1. $.ajax({  
  2.   url: "/api/getWeather",  
  3.   data: {  
  4.     zipcode: 97201  
  5.   },  
  6.   success: function( data ) {  
  7.     $( "#weather-temp" ).html( "<strong>" + data + "</strong> degrees" );  
  8.   }  
  9. }); 

假如你僅僅想要使用$.ajax這個功能,不想使用選擇器等功能怎么辦呢?答案很簡單:像你需要使用全部功能一樣,在頁面引用僅有97k的jQuery,然后使用$.ajax。

從這個例子中我們可以看出,耦合對于一個庫的重要性:耦合讓你那些不太被人接受的功能,跟著受歡迎的功能一起被強制使用,這樣,用戶就會逐漸被強奸,逐漸變得認為理所當然,這正是jQuery能夠成為"事實標準"的奧秘。

原文鏈接:http://www.cnblogs.com/winter-cn/archive/2013/02/20/2919855.html

責任編輯:林師授 來源: 博客園
相關推薦

2013-08-15 13:29:52

Moco程序庫設計

2009-09-07 19:03:08

2011-12-06 10:04:12

QQ手機移動應用應用設計

2009-08-03 10:13:13

開發框架

2009-02-10 11:19:54

2009-06-18 10:13:00

Java設計模式

2011-09-15 10:38:03

Windows 8UI設計

2011-06-03 17:06:09

自動化測試

2011-08-03 14:49:57

框架

2019-02-11 08:48:07

XMLJSON前端

2010-06-13 14:44:26

Java 7閉包Lambda表達式

2011-07-28 09:50:58

設計模式

2009-07-24 11:01:12

jQuery框架

2010-05-06 13:04:23

全局負載均衡

2012-09-06 10:07:26

jQuery

2013-07-18 14:36:21

2016-03-23 11:05:58

Socket開發框架分析

2018-06-14 10:44:59

MySQLMyISAMInnoDB

2009-09-03 11:42:32

2018-07-29 07:13:07

支付融資物聯網區塊鏈
點贊
收藏

51CTO技術棧公眾號

国产一区二区影院| 欧美aaaaaaaaaaaa| 91久久人澡人人添人人爽欧美 | 一级黄色av片| 天天超碰亚洲| 日韩久久免费电影| 亚洲男人天堂av在线| 日本高清在线观看| 国产午夜精品在线观看| 亚洲一区美女视频在线观看免费| 97超碰人人干| 偷偷www综合久久久久久久| 欧美精品一区二区三区很污很色的 | 国产噜噜噜噜久久久久久久久| 亚洲国产成人精品综合99| 婷婷成人综合| 日韩欧美中文一区| 手机看片福利日韩| 欧美hdxxxxx| 欧美国产禁国产网站cc| 91青青草免费在线看| 99久久久无码国产精品免费蜜柚| 国产精品chinese| 亚洲网在线观看| 扒开伸进免费视频| 91精品亚洲一区在线观看| 日韩欧美一区二区三区| 久久综合久久久久| 老司机在线看片网av| 91污片在线观看| 97夜夜澡人人双人人人喊| a片在线免费观看| 亚洲欧美日韩国产综合精品二区| 久久久久北条麻妃免费看| 国产一区二区三区四区五区六区| 久久精品色综合| 日韩一区二区三区电影在线观看| 日本中文字幕精品—区二区| 欲香欲色天天天综合和网| 亚洲成人在线网站| 妞干网在线观看视频| www在线免费观看视频| 国产精品丝袜一区| 日本一区美女| 高清av电影在线观看| 久久嫩草精品久久久久| 久久草视频在线看| 偷拍精品一区二区三区| 丁香五精品蜜臀久久久久99网站| 5566中文字幕一区二区| 国产不卡精品视频| 国产一区二区精品在线观看| 91理论片午午论夜理片久久| 亚洲系列第一页| 毛片一区二区三区| 国产日韩在线视频| 99精品视频免费看| 国产传媒日韩欧美成人| 91亚洲精品久久久久久久久久久久| 一个人看的www日本高清视频| 麻豆精品在线看| 91久久综合亚洲鲁鲁五月天| 国产美女三级无套内谢| 国产毛片精品国产一区二区三区| 亚洲综合中文字幕68页| 亚洲精品国产手机| 波多野结衣中文字幕一区二区三区 | 日韩激情网站| 亚洲欧洲在线免费| 波多野结衣一二三四区| 91精品综合久久久久久久久久久| 美女性感视频久久久| 日本天堂中文字幕| 国产精品腿扒开做爽爽爽挤奶网站| 欧洲午夜精品久久久| jizz国产在线| 精品午夜久久福利影院| 亚洲自拍另类欧美丝袜| 成人午夜免费福利| 337p粉嫩大胆色噜噜噜噜亚洲| 日本高清一区| 黄a在线观看| 亚洲国产精品久久人人爱| 红桃av在线播放| 国产国产一区| 欧美精品一区二区高清在线观看| 国产伦精品一区二区三区妓女| 国产亚洲一区二区三区不卡| 日韩在线观看免费高清完整版| 国产第一页浮力| 亚洲欧洲午夜| 国产精品黄色av| 性欧美8khd高清极品| 91色视频在线| 在线观看av的网址| 欧美gay囗交囗交| 3d成人h动漫网站入口| 91亚洲一线产区二线产区| 国产欧美久久一区二区三区| 久久久999国产精品| 日本一区二区三区免费视频| 免费观看成人鲁鲁鲁鲁鲁视频| 99久久自偷自偷国产精品不卡| 亚洲色图狠狠干| 亚洲三级电影网站| 国产男女在线观看| 欧美国产亚洲精品| 国产亚洲在线播放| 久久国产精品波多野结衣| 天堂在线亚洲视频| 国产精品一区二区三区不卡| 国产福利小视频在线| 亚洲午夜私人影院| 永久免费的av网站| 国产精品免费99久久久| 九色精品美女在线| 中文资源在线播放| 91蝌蚪国产九色| 国产在线视频在线| 四虎在线精品| 一区二区三区日韩在线| av中文在线播放| 国产成人一级电影| 一级一片免费播放| 四虎4545www国产精品| 亚洲第一精品福利| 欧美三级日本三级| 另类中文字幕网| 神马一区二区影院| 男人最爱成人网| 亚洲国产精品久久久久久| 国产大片免费看| 精品一区二区在线观看| 亚洲欧洲一区二区福利| 日韩在线短视频| 亚洲欧美日韩天堂| 国产亚洲欧美在线精品| 成人av影院在线| 久操网在线观看| 91精品国产自产精品男人的天堂 | 美女18一级毛片一品久道久久综合| 欧美v亚洲v综合ⅴ国产v| 一区二区三区影视| 国产精品一区一区| 国产日韩欧美大片| 国产高清视频一区二区| 久久色精品视频| 国产精品伦理一区| 亚洲男同1069视频| 在线免费黄色小视频| 综合av在线| 99影视tv| 日韩伦理在线一区| 国产视频在线观看一区二区| 国产美女激情视频| 久久精品一区二区| www.com黄色片| 久久久久久久久久久9不雅视频| 91亚洲永久免费精品| av毛片在线免费| 精品国产欧美一区二区| 国产精品9191| 久久久精品蜜桃| 密臀av一区二区三区| 久久社区一区| 91亚洲国产成人久久精品网站| 羞羞的网站在线观看| 精品国产制服丝袜高跟| 天天爽夜夜爽夜夜爽精品| 久久久久久影视| 老司机午夜性大片| 国模 一区 二区 三区| 九九九九九精品| 国产成人精品一区二区三区视频| 不卡毛片在线看| 天堂av资源在线| 在线观看区一区二| 精品国产欧美日韩不卡在线观看| 成人精品免费看| 色七七在线观看| 中出一区二区| 麻豆av一区二区三区久久| 成人a在线观看高清电影| 久久99热精品这里久久精品| 偷拍自拍在线| 欧美精品色综合| 日韩精品视频播放| 中文字幕成人在线观看| 无码人妻一区二区三区免费n鬼沢| 免费欧美在线| 永久免费网站视频在线观看| 日韩成人动漫在线观看| 成人福利在线观看| 国产精品蜜芽在线观看| 视频在线一区二区| 精品人妻一区二区三区浪潮在线 | 亚洲国产综合色| 国产无遮挡在线观看| 高清不卡一区二区| 8x8x最新地址| 国产亚洲一级| 国产日韩欧美大片| 日韩精品一区二区三区免费观影| 国产精品自拍首页| 91亚洲精品在看在线观看高清| 91国产视频在线| www.久久ai| 一区国产精品视频| 天堂中文字幕在线| 日韩一级精品视频在线观看| 国产无遮挡又黄又爽又色视频| 亚洲国产你懂的| 亚洲二区在线播放| 日本一区二区三区久久久久久久久不 | 波多野结衣亚洲一区| 成人黄色一级大片| 视频一区二区三区入口| 欧美一区二区中文字幕| 欧美在线高清| 公共露出暴露狂另类av| 日韩av有码| 日本一区二区三区免费观看| 伦理一区二区| 国产91aaa| 日韩成人视屏| 91国产在线播放| 国产精品免费精品自在线观看| 国产精品久久久久久久久久三级| 亚洲精品动漫| 欧美有码在线观看视频| 日本在线影院| 91精品国产高清久久久久久久久 | 国产精品69久久| 日韩伦理精品| 91精品国产91久久久久久久久| gogo高清在线播放免费| 欧美黑人又粗大| 在线欧美三级| 欧美国产日韩一区二区| 在线观看电影av| 欧美床上激情在线观看| 超碰porn在线| 欧美日韩国产成人在线| 99久久精品免费观看国产| 另类天堂视频在线观看| 国产福利视频在线| 欧美成人在线免费视频| 99热国产在线中文| 久久久久女教师免费一区| 欧美人动性xxxxz0oz| 久久久久久噜噜噜久久久精品| av剧情在线观看| 26uuu日韩精品一区二区| 精品91久久| 国产精品美女在线观看| 欧美亚洲黄色| 91九色在线观看| 国产精品白丝av嫩草影院| 精品人伦一区二区三区 | a级精品国产片在线观看| 国产xxxx视频| 久久久久久日产精品| 天堂av网手机版| 亚洲欧美偷拍三级| 国产精品1234区| 欧美性猛交xxxx久久久| 国产精华7777777| 欧美乱妇23p| 亚洲AV无码成人片在线观看| 亚洲国产成人精品电影| 日韩偷拍自拍| 日韩中文理论片| 性爱视频在线播放| 日韩av片电影专区| 日韩福利在线观看| 国产福利久久| 国产成人三级| 好色先生视频污| 国产婷婷精品| 182午夜在线观看| jiyouzz国产精品久久| 亚洲AV无码片久久精品| 综合欧美一区二区三区| 国产精品99精品| 在线一区二区三区| 亚洲精品97久久中文字幕无码| 亚洲一级黄色片| 最新国产露脸在线观看| 日本a级片电影一区二区| www一区二区三区| 麻豆av一区二区三区| 亚洲国产精品成人| 国产精品涩涩涩视频网站| 国产精品一区二区91| www.av欧美| 亚洲国产精品一区二区久久恐怖片 | 国产精品初高中精品久久| 国产一区二区三区网| 国产成人亚洲综合无码| 免费欧美日韩国产三级电影| 在线精品视频播放| 亚洲天堂免费在线观看视频| 在线观看亚洲欧美| 日韩欧美视频一区| 9色在线视频网站| 97在线免费观看| 看亚洲a级一级毛片| 日韩av一区二区三区美女毛片| 狠狠色综合网| 国产精品自在自线| 国产日韩欧美a| 久久精品一二区| 欧美成人伊人久久综合网| 9i精品一二三区| 国产国语videosex另类| 欧美理伦片在线播放| 水蜜桃在线免费观看| 免费观看在线综合色| 欧美 日本 国产| 亚洲丶国产丶欧美一区二区三区| 国产精品欧美激情在线| 中文字幕精品一区久久久久| 黄色在线网站噜噜噜| 国产精品久久久一区二区三区| 91精品国产福利在线观看麻豆| 一区二区三区韩国| 国产亚洲福利社区一区| 69亚洲精品久久久蜜桃小说| 亚洲а∨天堂久久精品喷水| 日韩激情av| 99r国产精品视频| 99精品电影| 亚洲天堂网2018| ...xxx性欧美| 91黄色在线视频| www日韩欧美| 日韩三级成人| 天天成人综合网| 国产在线精品一区二区夜色| 最新av电影网站| 91麻豆精品国产| 黄在线免费看| 91手机在线视频| 黄色欧美日韩| 一级欧美一级日韩片| 婷婷开心久久网| 午夜福利视频一区二区| 欧美亚洲午夜视频在线观看| 青青操综合网| 日本在线视频www| 国产亚洲精品资源在线26u| 久久久久亚洲视频| 中文字幕久久久av一区| 亚洲狼人在线| 少妇久久久久久被弄到高潮| 丁香一区二区三区| 欧美另类一区二区| 亚洲一区av在线播放| 日韩在线你懂得| 精品成在人线av无码免费看| 成人av资源网站| 青青草视频在线观看免费| 中文精品99久久国产香蕉| 亚洲福利影视| 男人添女荫道口女人有什么感觉| www.欧美色图| 亚洲精品一区二区二区| 久久久国产一区二区| ccyy激情综合| www.四虎成人| 中文字幕中文字幕一区| 亚洲精品国产av| 日韩免费在线视频| 欧美肥老太太性生活| 年下总裁被打光屁股sp| 一本色道久久加勒比精品| 尤物视频在线免费观看| 不卡日韩av| 久久av最新网址| 日韩在线一卡二卡| 亚洲黄页网在线观看| 91精品国产66| 成人免费观看在线| 国产欧美一区二区精品仙草咪| 国产欧美久久久精品免费| 国内外成人免费激情在线视频网站 | 日韩中文字幕在线播放| 国产精品18hdxxxⅹ在线| av五月天在线| 一区二区三区久久| 成年人在线视频| 国产精品theporn88| 日日夜夜一区二区| 久久久久久久福利| 在线播放日韩精品| 欧美成人午夜77777| 香蕉视频999| 色婷婷精品大在线视频| 色婷婷av在线| 亚洲一区二区三区乱码|