精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

理论不卡电影大全神| 丰满人妻一区二区三区无码av| 五月国产精品| 欧美色图在线观看| 精品免费久久久久久久| 色网站免费观看| 蜜臂av日日欢夜夜爽一区| 日韩中文在线不卡| 扒开伸进免费视频| 日本成人福利| 精品久久久久久久久国产字幕| 日韩精品伦理第一区| 国产成人精品一区二三区四区五区| 亚洲国产高清一区| 中文字幕日韩免费视频| 四季av综合网站| 国产一区影院| 欧美日韩国产精品| 成人在线观看www| 国产最新视频在线观看| 国产精品夜夜嗨| 国产激情视频一区| 日本三级免费看| 99视频精品视频高清免费| 国产午夜精品麻豆| 国产精品一区二区无码对白| 欧美一区=区三区| 色哟哟一区二区| www.欧美黄色| 国产精品刘玥久久一区| 中文字幕高清一区| 精品欧美国产| 人妻精品一区二区三区| 韩国成人福利片在线播放| 日本伊人精品一区二区三区介绍| 久久伊人成人网| 天天射天天综合网| 一本一本久久a久久精品牛牛影视| 成人在线观看一区二区| 亚洲成人高清| 欧美日韩国产色站一区二区三区| 97在线播放视频| 僵尸再翻生在线观看免费国语| 亚洲日韩欧美一区二区在线| 一区二区三区四区欧美| av在线首页| 国产日产精品1区| 麻豆成人小视频| 人妻少妇精品无码专区| 丁香网亚洲国际| 国产成人av一区二区三区| 国产美女免费视频| 看片的网站亚洲| 国产欧美日韩亚洲精品| 免费在线不卡av| 首页综合国产亚洲丝袜| 国产成人中文字幕| 波多野结衣一区二区三区四区| 国产精品主播| 欧美中文字幕在线| 丁香社区五月天| 天堂一区二区在线| 国产精品人成电影在线观看| 中文字幕一区二区三区四区视频 | 日韩有码一区| 亚洲精品久久久久久久久久久久久 | 亚洲v日韩v欧美v综合| 成人精品一区二区| 国产精品视频免费| 国产日本欧美在线| 在线免费观看a视频| 亚洲国产一区在线观看| 国产特级黄色大片| 浪潮色综合久久天堂| 欧美日韩一区三区四区| 国产大片一区二区三区| 涩涩屋成人免费视频软件 | 免费在线黄色影片| 国产欧美日韩麻豆91| 在线观看成人av| 欧美家庭影院| 色婷婷综合久久久中文字幕| 久久国产这里只有精品| 玖玖玖电影综合影院| 亚洲精品久久7777777| 天天摸日日摸狠狠添| 天天做天天爱天天爽综合网| 欧美国产在线视频| 69国产精品视频免费观看| 奇米四色…亚洲| av免费观看久久| 亚洲色图狠狠干| 亚洲欧洲精品一区二区三区| 青青草成人免费在线视频| 免费观看成人性生生活片| 欧美一级一区二区| 800av在线播放| 日韩毛片视频| 性色av一区二区三区红粉影视| 青青国产在线视频| 国产精品影视在线| 热re99久久精品国99热蜜月| 大片免费在线看视频| 精品色蜜蜜精品视频在线观看| 久久人人爽av| 一区二区三区日本久久久 | 国内精品伊人久久久久av影院| 国产精品久久久久久久久久直播| 黄色片在线免费看| 亚洲影视在线观看| 黄色手机在线视频| 偷拍自拍一区| 操91在线视频| 免费污污视频在线观看| 国产成人av电影在线| 日韩在线电影一区| 激情aⅴ欧美一区二区欲海潮| 欧美精品黑人性xxxx| 日本少妇xxxx| 亚洲色图欧美| 国产在线日韩在线| 国内精品一区视频| 欧美视频精品一区| 怡红院一区二区| 欧美国产先锋| 成人网在线免费观看| 国产玉足榨精视频在线观看| 亚洲777理论| 免费人成视频在线播放| 日韩欧美视频在线播放| 国产成+人+综合+亚洲欧洲 | 中文一区二区视频| 六月丁香激情综合| www.成人网.com| 国产欧美精品aaaaaa片| 欧一区二区三区| 久久精品中文字幕电影| 伊人网站在线观看| 国产日韩欧美精品电影三级在线| 免费黄色福利视频| 国产精品极品国产中出| 色综合天天综合网国产成人网 | 亚洲美女免费精品视频在线观看| 久久精品国产亚洲av麻豆色欲| 国产一区久久久| 日本黄xxxxxxxxx100| 亚洲一区av| 欧美成人四级hd版| 国产农村妇女毛片精品| 亚洲免费观看高清完整版在线观看熊 | 日韩av网站在线观看| 欧美一级二级三级九九九| 都市激情亚洲综合| 亚洲欧美综合区自拍另类| 麻豆精品久久久久久久99蜜桃| 99re视频精品| 成人羞羞国产免费网站| 亚洲警察之高压线| 国产91在线播放| 国产爆初菊在线观看免费视频网站| 91久久国产最好的精华液| 久久国产柳州莫菁门| 青青青爽久久午夜综合久久午夜| 亚洲国产日韩综合一区| 日本亚洲欧洲无免费码在线| 久久的精品视频| 精品免费久久久| 性感美女极品91精品| 中文字幕av观看| 日韩高清一区在线| 在线电影看在线一区二区三区| 日韩欧美久久| 91精品国产99久久久久久| 免费a在线观看| 欧美日韩一区高清| 外国一级黄色片| 99国产精品99久久久久久| 999精品视频在线| 欧美一区二区三区另类| 含羞草久久爱69一区| 成人国产一区二区三区精品麻豆| 久久精品欧美视频| 婷婷五月综合激情| 欧美午夜一区二区三区 | 亚洲成av人片在线观看| 色欲av无码一区二区三区| 美女视频黄频大全不卡视频在线播放 | 国产精品一区二区久久精品 | 亚洲免费成人av| a天堂视频在线观看| 日本免费在线视频不卡一不卡二 | 永久免费毛片在线观看| 国产福利视频一区二区三区| 国产av无码专区亚洲精品| 性欧美69xoxoxoxo| 精品中文字幕一区| 国色天香久久精品国产一区| 欧美一级bbbbb性bbbb喷潮片| 91在线导航| 日韩精品在线视频| 国产免费黄色大片| 在线视频国内一区二区| 久久久精品视频在线| 亚洲国产成人自拍| 亚洲制服丝袜在线播放| 国产一区二区三区四区五区入口| 97av视频在线观看| 伊人成人在线视频| 欧美 日韩 国产 在线观看| 夜夜躁狠狠躁日日躁2021日韩| 2014亚洲精品| 国产成人a视频高清在线观看| 91成品人片a无限观看| 黄视频网站在线看| 一本大道久久加勒比香蕉| 亚洲欧美日本在线观看| 日韩欧美第一区| 国产又粗又猛又色又| 欧美在线制服丝袜| 亚洲国产成人精品激情在线| 亚洲激情六月丁香| 男人在线观看视频| 国产精品免费视频网站| 亚洲精品午夜视频| 99精品桃花视频在线观看| 日韩大尺度视频| 激情丁香综合五月| www.com黄色片| 日日噜噜夜夜狠狠视频欧美人| 黄色av网址在线播放| 欧美三级网页| 女人床在线观看| 亚洲成av人片一区二区密柚| 亚洲精品一区二区三区四区五区| 一呦二呦三呦国产精品| 久久综合给合久久狠狠色| 鲁大师精品99久久久| 成人动漫视频在线观看完整版| 精品午夜视频| 亚洲最大av网站| 韩国一区二区三区视频| 亚洲精品免费网站| 97精品资源在线观看| 成人激情视频在线观看| 亚洲伦理久久| 91中文在线观看| 欧美在线在线| 国产98在线|日韩| 东京久久高清| 国产一区二区三区av在线| 国产成人在线中文字幕| 精品视频在线观看| 日韩有码av| 日韩欧美精品一区二区| 欧美一区二区性| 一区二区在线观| 午夜精品av| 精品国产一区三区| 亚洲欧美视频一区二区三区| 欧美精品无码一区二区三区| 日韩国产成人精品| 亚洲精品中文字幕乱码无线| 福利一区二区在线观看| 国产白嫩美女无套久久| 久久久精品综合| 强制高潮抽搐sm调教高h| 一区二区在线观看免费| 在线观看中文字幕视频| 在线观看日韩电影| 国产又黄又大又粗的视频| 日韩欧美一二区| 头脑特工队2在线播放| 亚洲精品一区av在线播放| www.中文字幕久久久| 久久夜色精品国产欧美乱| 24小时免费看片在线观看| 欧美专区第一页| 精品69视频一区二区三区| 99久久伊人精品影院| 自拍偷拍精品| 中文字幕综合在线观看| 精品电影一区| 欧美一级黄色影院| 国产精品一区二区无线| 亚洲欧美色图视频| 亚洲三级在线播放| 亚洲日本视频在线观看| 在线电影国产精品| 欧美一级特黄aaaaaa| 国产一区二区日韩精品欧美精品| 超碰在线免费公开| 青草热久免费精品视频| 91精品麻豆| 欧美二区在线| 欧美视频导航| www.日本一区| 99久久99精品久久久久久| 久久久久亚洲av片无码| 欧美日韩国产一区二区| 国产又粗又黄视频| 亚洲人成网站999久久久综合| 一区二区三区伦理| 国产精品视频午夜| 欧美高清视频看片在线观看| 中文字幕一区综合| 男女精品网站| 国产婷婷在线观看| 中文字幕一区二区三区不卡 | 欧美裸体bbwbbwbbw| 香蕉久久国产av一区二区| 久久资源免费视频| 91精品美女| 久久涩涩网站| 精品动漫3d一区二区三区免费版| 色噜噜狠狠永久免费| 2021久久国产精品不只是精品| 强行糟蹋人妻hd中文| 欧美三级日韩在线| 欧美孕妇性xxxⅹ精品hd| 欧美激情在线观看视频| 国产精品xnxxcom| 色狠狠久久av五月综合|| 久久xxxx| 亚洲一区二区观看| 亚洲国产精品天堂| 精品人妻午夜一区二区三区四区| 最近更新的2019中文字幕| free欧美| 欧美日韩亚洲免费| 在线亚洲免费| 性欧美18—19sex性高清| 一区二区三区视频在线观看| 国产美女免费看| 久久天堂电影网| 久久精品九色| 日本丰满少妇黄大片在线观看| 久久成人免费网站| 三级黄色片在线观看| 欧美午夜精品久久久久久孕妇 | 国产午夜精品一区二区三区嫩草 | 欧美精品一区二区三区蜜臀| av激情在线| 亚洲综合中文字幕在线| 欧美一区不卡| 亚洲熟女一区二区三区| 亚洲一区在线观看网站| 欧美 日韩 中文字幕| 国语自产精品视频在线看一大j8 | 男人添女荫道口女人有什么感觉| 国产乱一区二区| 日韩在线观看视频一区二区| 91精品久久久久久蜜臀| 影音先锋男人在线资源| av色综合网| 国产精品毛片在线看| 成人h动漫精品一区| 色婷婷久久一区二区三区麻豆| 超碰国产在线| 亚洲tv在线观看| 国产精品av一区二区| 国产老熟女伦老熟妇露脸| 日韩欧美a级成人黄色| 蜜桃视频在线观看网站| 国产精品免费一区二区三区都可以| 日韩伦理一区| 国产ts在线观看| 欧美性猛交99久久久久99按摩| 国产h在线观看| 成人乱人伦精品视频在线观看| 好吊一区二区三区| 亚洲第一黄色网址| 欧美视频你懂的| 性直播体位视频在线观看| 国产区日韩欧美| 日韩二区三区四区| 97成人资源站| 日韩第一页在线| 欧美大片网站| 青青青在线视频播放| 久久久久久久久岛国免费| 一级黄色片网站| 97国产精品久久| 91日韩欧美| 视频免费在线观看| 欧美日韩激情一区| 操喷在线视频| 亚洲一区高清| www.亚洲在线| 怡春院在线视频| 国外色69视频在线观看| 超碰成人久久| 9.1在线观看免费| 在线观看国产精品网站| dy888亚洲精品一区二区三区| 久久精品日韩精品| 国产在线不卡一区| 97人妻一区二区精品视频| 欧美巨乳美女视频| 成人在线一区| 成人h动漫精品一区|