自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MooTools團(tuán)隊(duì)成員:我們?yōu)楹螐?qiáng)于jQuery

開(kāi)發(fā) 開(kāi)發(fā)工具
文章的作者是MooTools Team的成員之一,本文他主要講解了jQuery和MooTools的區(qū)別,同時(shí)也分享了他寫(xiě)JavaScript代碼的方式和思維。

jQuery非常容易學(xué)習(xí),有很杰出的特性,但是當(dāng)你從插件庫(kù)里去找更多的功能時(shí),發(fā)現(xiàn)官方的庫(kù)里面根本就沒(méi)有。插件特性非常好,但是也有很不好的地方……很快你就會(huì)被無(wú)數(shù)個(gè)可用的插件弄得暈頭轉(zhuǎn)向,你需要花很多時(shí)間去確定哪些插件才和核心庫(kù)的質(zhì)量相匹配。

因此,我必須首先很輕而易舉地證明:jQuery是***以及有更好表現(xiàn)的框架。他們是***的。John Resig(jQuery的作者)在三天里曾七次說(shuō):“Microsoft演示了怎樣把jQuery包含進(jìn)了它的SDK,出席會(huì)議的人也非常肯定地談?wù)摿诉@個(gè)框架。這些都清楚地讓我看到:jQuery正在做一些正確的事情。”

我去參加這個(gè)會(huì)議的一部分任務(wù)就是盡可能多地參與jQuery的交流和學(xué)習(xí)(我曾經(jīng)也很深入地學(xué)習(xí)過(guò),但是我希望從開(kāi)發(fā)團(tuán)隊(duì)和John那里學(xué)習(xí)到更多東西),同時(shí)也可以看一下我是否能夠找到這個(gè)框架受歡迎的原因。

jQuery  MooTools

這里需要一些解釋。MooTools團(tuán)隊(duì)從來(lái)沒(méi)有真正關(guān)注過(guò)這個(gè)框架有多受歡迎。我們只是對(duì)寫(xiě)這個(gè)框架感興趣,為我們自己使用和它本身目的去寫(xiě),但是我們真的沒(méi)有花很多精力去讓其他人去使用這個(gè)框架。我們從不認(rèn)為其它框架是我們的競(jìng)爭(zhēng)對(duì)手——因?yàn)槲以?jīng)在很多場(chǎng)合都聽(tīng)說(shuō)過(guò)這樣的話,我們?cè)诤蜑g覽器進(jìn)行斗爭(zhēng),而不是相互斗爭(zhēng)。在我的這篇文章中,我給你們的建議是:多嘗試一些選 擇,然后選擇適合你的需求和你的風(fēng)格的框架。你真的不能做一個(gè)壞的選擇(因此,請(qǐng)停止?fàn)幊常。Query、Prototype、YUI、Dojo、 MooTools——我們都只是用不同的方法在做同樣的事。關(guān)于這一點(diǎn)寫(xiě)得有點(diǎn)多,因?yàn)槲易罱恢痹谒伎歼@個(gè)。

Bill Scott在繼續(xù)教我一些事情

當(dāng)這個(gè)事情還在Boston的時(shí)候,我偶然遇見(jiàn)了Bill Scott。Bill是Yahoo的YUI團(tuán)隊(duì)的***,是一個(gè)很好的演講者(盡管他在Boston的時(shí)候只做了一個(gè)關(guān)于他當(dāng)前工作的五分鐘的“閃電演 講”)。一段時(shí)間以前,他幫助開(kāi)始了Rico框架的開(kāi)發(fā),隨后轉(zhuǎn)到了YUI。接著在一年前,他離開(kāi)了Yahoo,去了Netflix,帶領(lǐng)團(tuán)隊(duì)做了許多工 作——不只是JavaScript(更多地關(guān)注了他們的新API和用戶體驗(yàn))。Netflix也在使用jQuery,因此我有機(jī)會(huì)和他坐下來(lái)談?wù)撨@些事 情。

在這里我要小心一些,并提醒正在閱讀這篇文章的各位讀者,我沒(méi)有任何關(guān)于 jQuery的壞話要說(shuō),我也不想在這篇文章或者其他文章中挑起一場(chǎng)無(wú)謂的爭(zhēng)論。jQuery和MooTools(以及Prototype、Dojo、 YUI等等等等)都是不同的而且沒(méi)有相互競(jìng)爭(zhēng)。它們用不同的方式解決問(wèn)題,而我,就個(gè)人而言,碰巧喜歡Moot解決問(wèn)題的方式以及它嘗試解決問(wèn)題的方式。 由于我還在學(xué)習(xí)jQuery,因此很容易我可能就會(huì)寫(xiě)一些不正確的jQuery語(yǔ)句,如果我有什么說(shuō)得不正確的地方,還請(qǐng)大家諒解。

編程模式

在和Bill的談話中,我說(shuō)了我的一些關(guān)于“編程模式”的思考。我所謂的“編程模式”是這樣的:當(dāng)我寫(xiě)我的代碼的時(shí)候,我可以選擇做一個(gè)架構(gòu)師,或者一個(gè)代碼編寫(xiě)者。我可以設(shè)計(jì),我也可以實(shí)施。事實(shí)上,我必須都做,但是我必須選擇我更想做的一個(gè),而且,在許 多情況下,不論是我還是其他人,都可能一個(gè)人去完成幾乎所有的工作——盡管不是100%。

我究竟在說(shuō)些什么?讓我這樣跟你講:如果你寫(xiě)了20行代碼,來(lái)描述一個(gè)頁(yè)面上的用戶交互,以便使頁(yè)面看起來(lái)很 漂亮或者很易用,那么它是不是值得再多寫(xiě)5行或者10行代碼來(lái)使其可以被重復(fù)使用?如果你只是依據(jù)經(jīng)驗(yàn)直接編程,那么你需要寫(xiě)一遍又一遍。但是如果你按照 模式來(lái)寫(xiě),你要寫(xiě)的代碼會(huì)越來(lái)越少。

假設(shè)有這樣一個(gè)用戶體 驗(yàn):當(dāng)喲哦難怪乎點(diǎn)擊“log in”按鈕的時(shí)候,顯示一個(gè)登陸框。當(dāng)用戶點(diǎn)擊“log in”的時(shí)候,這個(gè)登陸框就出現(xiàn)。用戶提交登陸表單,登陸框發(fā)出一個(gè)ajax請(qǐng)求并顯示一個(gè)提示信息。當(dāng)請(qǐng)求完成時(shí),這個(gè)登陸框告訴用戶已經(jīng)登陸了并在過(guò) 一會(huì)兒后消失。

我可以用JavaScript來(lái)表現(xiàn)這些,就寫(xiě)在當(dāng)前這個(gè)頁(yè)面上或 者在我的全站代碼里面(可能這個(gè)登陸框在每個(gè)頁(yè)面上都有,是吧?)。它可能是這樣一段代碼(我會(huì)在某種程度上省略一些代碼)——注意:我這里使用的是MooTools的語(yǔ)法,不過(guò)它看起來(lái)和現(xiàn)在的大多數(shù)框架都差不多,因?yàn)槲覀兌枷嗷ソ梃b好的點(diǎn)子:

  1. window.addEvent('domready', function(){  
  2.      $('loginLink').addEvent('click', function(e){  
  3.          e.stop(); //don't follow the link  
  4.          $('loginPopup').show();  
  5.      });  
  6.      //loginPopup contains loginForm  
  7.      $('loginForm').addEvent('submit', function(e){  
  8.          e.stop(); //don't submit the form  
  9.          $('loginForm').send({  
  10.              onComplete: function(result) {  
  11.                  $('loginPopup').set('html', result); //show the result  
  12.                  (function(){  
  13.                      $('loginPopup').hide();  
  14.                  }.delay(1000)); //wait a sec, then hide the popup  
  15.              }  
  16.          })  
  17.      });  
  18. }); 

美麗的直接了當(dāng),是吧?但是我們退后一步,然后問(wèn)我們自己:這是什么模式呢?我們能再看到它的一部分嗎?當(dāng)然,一個(gè)彈出層包含一個(gè)form,然后提交、更新自己,然后做一些其它事情,而且可以再次出現(xiàn)。是吧?

這就是我所說(shuō)的“編程模式”。在我以前的代碼中,我 可能像上面的那樣寫(xiě)代碼。如果它是我的網(wǎng)站的一部分,我可能有一個(gè)名字空間(namespace)并且給它們一個(gè)叫做“showLogin”的方法,然后 在on domready事件中調(diào)用mySite.showLogin。或者,更可能是這樣子的,我的網(wǎng)站需要很多這樣的方法。showLogin、 logOut、makeToolTips、autoScroll、setupDraggers等等。然后我會(huì)寫(xiě)一個(gè)叫做mySite.init的方法來(lái)調(diào) 用所有的這些方法。

但是在回頭看看我的老代碼,我可能有一個(gè)巨大的domready方法,里面包括了所有的這些布局和交互的指令,一個(gè)很大的啟動(dòng)方法。

如果你從來(lái)沒(méi)有寫(xiě)過(guò)這樣的代碼,你永遠(yuǎn)也不會(huì)知道維護(hù)這個(gè)代碼的樂(lè) 趣。它會(huì)花費(fèi)大量的精力去理解在***件事情之后該是什么事情。再回頭看看上面的示例代碼,想像一下,如果我們遇到了類(lèi)似的事情,但是有這個(gè)的3倍、5倍或 者10倍長(zhǎng),然后再想像一下一年以后我們?cè)俅闻龅筋?lèi)似的事情。僅僅只是拆分這些行為就已經(jīng)非常令人可怕了。

現(xiàn)在,讓我們按照模式編程。一個(gè)彈出層,有一個(gè)form,并且自動(dòng)更新。這就是我們要重復(fù)出現(xiàn)的模式。下面是一個(gè)MooTools類(lèi),實(shí)現(xiàn)了同樣的東西:

  1.  var PopupForm = new Class({  
  2.      Implements: [Events, Options],  
  3.      options: {  
  4.          requestOptions: {/*the user can fill in additional ajax options*/},  
  5.          onComplete: $empty //do nothing on complete by default  
  6.      },  
  7.      initialize: function(link, form, popup, options) {  
  8.          this.form = $(form);  
  9.          this.link = $(link);  
  10.          this.popup = $(popup);  
  11.          this.setOptions(options);  
  12.          this.makeRequest();  
  13.          this.attach();  
  14.      },  
  15.      makeRequest: function(){  
  16.          thisthis.request = this.form.retrieve('send', this.options.requestOptions);  
  17.          this.request.addEvent('complete', function(response){  
  18.              popup.set('html', response);  
  19.              this.fireEvent('complete');  
  20.          }.bind(this));  
  21.      },  
  22.      attach: function(){  
  23.          this.link.addEvent('click', this.show.bind(this));  
  24.          this.form.addEvent('submit', function(e){  
  25.              e.stop();  
  26.              this.request.send();  
  27.          }.bind(this));  
  28.      },  
  29.      show: function(){  
  30.          this.popup.show();  
  31.      },  
  32.      hide: function() {  
  33.          this.popup.hide();  
  34.      }  
  35. }); 

現(xiàn)在,不可否認(rèn)的是我的類(lèi)已經(jīng)有兩倍長(zhǎng)了,但是它還仍然沒(méi)有與我的登陸鏈接關(guān)聯(lián)起來(lái)。要使其生效,我還需要對(duì)它進(jìn)行初始化:

  1. window.addEvent('domready', function(){  
  2.     new PopupForm($('loginLink'), $('loginForm'), $('loginPopup'), {  
  3.         onComplete: function(){  
  4.             (function(){  
  5.                 this.hide();  
  6.             }.delay(1000, this)); //wait a sec, then hide the popup  
  7.         }  
  8.     })  
  9. }); 

#p#

有所取舍,但追求***利益

除了代碼變成了以前的兩倍長(zhǎng)以外,我還需要其他的9行代碼去完成這個(gè)事情。15行代碼和42行代碼,看起來(lái)并不是個(gè)好的交易,但是我最近在我的所有代碼里面都是這樣寫(xiě)的。通過(guò)變換到這種思考方式,我從寫(xiě)很多很多代碼段中解放出來(lái),也節(jié)約了很多我以前根本沒(méi)有考慮到的時(shí)間。

◆代碼現(xiàn)在更加清晰易讀了。我有一些很小的方法,它們只做一件事情,但是我知道它們?cè)谧鍪裁匆约盀槭裁醋?。我的?lèi)的名字描述了它們要做的事情,而且它們也很小,也只做一件事情。如果我需要一個(gè)做兩件事情的類(lèi),我會(huì)寫(xiě)兩個(gè)類(lèi)和一個(gè)小的控制類(lèi)來(lái)調(diào)用它們。

◆代碼可以重復(fù)使用——如果這個(gè)模式再度出現(xiàn),我不需要再重復(fù)寫(xiě)這些代碼。我曾經(jīng)被它們出現(xiàn)的頻率嚇倒。我從來(lái)沒(méi)有想過(guò)要重用一周以內(nèi)的代碼,但是我現(xiàn)在又開(kāi)始重新使用他們了。

◆應(yīng)用程序在哪——我現(xiàn)在正在做的web頁(yè)面上,我的代碼一般都很少。我不給頁(yè)面單獨(dú)寫(xiě)多少代碼——我所做的只是針對(duì)每個(gè)給定的頁(yè)面元素實(shí)例化一些類(lèi)。這些小的“腳印”(頁(yè)面執(zhí)行時(shí)間?)意味這越少的代碼對(duì)頁(yè)面越好。

◆什么時(shí)候需要重構(gòu)——可能我現(xiàn)在使用的框架已經(jīng)有新的版本了,或者發(fā)現(xiàn)了一個(gè)新的瀏覽器bug,或者一個(gè)先的瀏覽器沖擊了市場(chǎng)(例如Chrome),或者 我在自己的代碼里面發(fā)現(xiàn)了一個(gè)bug(這是這幾個(gè)原因里面最常見(jiàn)的),我需要立即修正它們。如果我為每個(gè)頁(yè)面都寫(xiě)了有代碼,那么我將需要一一修正。從另外 一個(gè)方面來(lái)說(shuō),如果我的頁(yè)面只是實(shí)例化了我的幾個(gè)類(lèi),我只需要修改我的類(lèi)就行了。因?yàn)槲铱刂浦?lèi)的接口,所以我可以完全重寫(xiě)我的類(lèi),而不需要接觸那些實(shí)例 化它們的代碼。

◆***,我徹底地改變了我的關(guān)于開(kāi)發(fā)用戶體驗(yàn)的思維方式。我更喜歡開(kāi)發(fā)一個(gè)體驗(yàn),然后重用它,而不是從頭開(kāi)始做一個(gè)新的。這可以創(chuàng)造一個(gè)連貫的體驗(yàn),對(duì)我而言,意味著更好的用戶體驗(yàn)。

可擴(kuò)展性——因?yàn)槲蚁矚g調(diào)整一些東西

這是這種編碼方式給我代理的***一個(gè)大好處,假設(shè)你現(xiàn)在寫(xiě)代碼的方式能夠利用它的可擴(kuò)展性。 MooTools有一種基于類(lèi)的層次結(jié)構(gòu)(靈感來(lái)源于Dean Edwards的杰出工作),不要被這個(gè)名字給欺騙了。盡管它叫做類(lèi),實(shí)際上就只是一個(gè)object工廠,只不過(guò)讓JavaScript里面的原型繼承模 型變得更容易跟簡(jiǎn)單而已。

你當(dāng)然不需要MooTools來(lái)做這些。JavaScript可以讓你自己來(lái)實(shí)現(xiàn)。但是由于MooTools底層就是這樣做的,因此很難避免讓你去寫(xiě)這樣的代碼。寫(xiě)一個(gè)你自己的類(lèi)真的很容易,擴(kuò)展一個(gè)類(lèi)也很容易——即使你沒(méi)有寫(xiě)過(guò)這個(gè)類(lèi)。

繼續(xù)以我們上面提到的彈出表單為例。我們說(shuō)我們需要一個(gè)彈出顯示效果。為了讓其變得有趣一點(diǎn),我們假設(shè)已經(jīng)有這樣的代碼了,因此我們不想去改變它,但是在這個(gè)頁(yè)面中,我們想要這個(gè)彈出層有淡入淡出的效果,而不僅僅是出現(xiàn)。

MooTools允許你使用任何類(lèi)(甚至你沒(méi)有寫(xiě)過(guò)的類(lèi))并擴(kuò)展成為一個(gè)新類(lèi)。你不需要復(fù)制整個(gè)類(lèi)以便添加你的不同代碼——你只需要寫(xiě)那些你需要添加或者改變的部分就行了。

  1. var PopupForm.Fx = new Class({  
  2.     Extends: PopupForm,  
  3.     show: function(){  
  4.         this.popup.setStyles({  
  5.             opacity: 0,  
  6.             display: 'none'  
  7.         }).tween('opacity', 1);  
  8.     },  
  9.     hide: function(){  
  10.         this.popup.tween('opacity', 0).chain(function(){  
  11.             this.popup.hide();  
  12.         }.bind(this));  
  13.     }  
  14. });  

現(xiàn)在,我 們有一個(gè)名字叫做“PopupForm.Fx”的新類(lèi)了,這個(gè)類(lèi)可以讓彈出層淡入淡出。我們完全沒(méi)有改變PopupForm類(lèi)。另外,即使我們?cè)诤竺姘l(fā)現(xiàn) 了PopupForm類(lèi)的某個(gè)方法中有一個(gè)bug,我們可以在那個(gè)地方修正它,這將會(huì)修復(fù)這兩個(gè)類(lèi)以及所有我們使用了它的地方。

當(dāng)我用這個(gè)方式寫(xiě)代碼的時(shí)候,這意味著我在我工作的每一個(gè)頁(yè)面、網(wǎng)站和項(xiàng)目 中都添加了一些新的工具到我的工具箱,當(dāng)?shù)较乱粋€(gè)項(xiàng)目時(shí)我仍然可以使用。在過(guò)去的一兩年里,我已經(jīng)為MooTools發(fā)布了超過(guò)70個(gè)插件,而這還只是我 認(rèn)為其他人能夠用到的東西。表單驗(yàn)證、數(shù)據(jù)提取以及其他。我還為我自己的項(xiàng)目寫(xiě)了很多擴(kuò)展,盡管它們不是很通用,但是在我的動(dòng)作中并沒(méi)有少重用它們。
揭開(kāi)面紗看看

所有的這一切讓我回到了我真正要說(shuō)的:我是怎樣看待MooTools以及它與其他框架有什么不一樣。看看jQuery的表現(xiàn)(再次重復(fù):jQuery僅僅只是不同——沒(méi)有優(yōu)劣之分),我認(rèn)為MooTools和jQuery***的不同在表現(xiàn)的解決方案上。

當(dāng)和Bill Scott談?wù)撍膱F(tuán)隊(duì)和他們對(duì)jQuery的使用,我詢問(wèn)了他們對(duì)于按模式編程的所做的工作。Bill是相當(dāng)適合問(wèn)這個(gè)問(wèn)題的人選,因?yàn)樗ツ昊撕荛L(zhǎng) 時(shí)間做了一個(gè)關(guān)于用戶體驗(yàn)?zāi)J胶蚘UI的演講(我強(qiáng)烈推薦這個(gè))。他領(lǐng)導(dǎo)了整個(gè)YUI項(xiàng)目模式庫(kù)。他是一個(gè)一直致力于為重用而創(chuàng)建模式的人。我問(wèn)了他關(guān)于 在jQuery中創(chuàng)建插件的機(jī)制,而不是擴(kuò)展那些插件,坦率地說(shuō),這個(gè)插件機(jī)制對(duì)于我來(lái)說(shuō)有一點(diǎn)尷尬(例如,你為了調(diào)用一個(gè)插件的方法,你必須這樣 寫(xiě):jQuery(domId).pluginName(”methodName”, [arg1, arg2]);——我希望我說(shuō)的是對(duì)的——這對(duì)于我來(lái)說(shuō)實(shí)在是神秘莫測(cè))

在 聽(tīng)我談完關(guān)于MooTools里面的可重用性和可擴(kuò)展性模式之后,他做了一個(gè)很精妙的總結(jié):他對(duì)JavaScript非常了解,可以利用 JavaScript本身內(nèi)置的一些機(jī)制來(lái)完成他自己的一些方法。換句話說(shuō),他用jQuery進(jìn)行Dom操作、實(shí)現(xiàn)特效以及用于一些其他插件,但是當(dāng)他寫(xiě) 自己的代碼的時(shí)候,他有了自己的類(lèi)系統(tǒng)(盡管我不確定他用了“類(lèi)”這個(gè)詞——但是本質(zhì)上有一些工廠去創(chuàng)建這些可重用和可擴(kuò)展的object)。
JavaScript有它自己的重用方法

這個(gè),坦率地講,是我沒(méi)有考慮到的。jQuery在模糊DOM方面做得非常非常的好,使得用戶不再那么頭疼。它使用起來(lái)非常簡(jiǎn)單而且非常善于表現(xiàn)。作為一個(gè)寬泛的框架(即在這個(gè)框架中,用戶只是把JavaScript當(dāng)作一種面向?qū)ο笳Z(yǔ)言)的一部分來(lái)看,它是很明智的。

但是Bill隨后說(shuō)的話讓我認(rèn)真 地思考了在Ajax體驗(yàn)過(guò)程中的參與者。他是這樣說(shuō)的:“我從來(lái)沒(méi)有認(rèn)真地認(rèn)為其他人不會(huì)這么做。”其他人可以使用jQuery(或者其他任何框架,甚至 只是“香草味”的JavaScript)而不利用JavaScript的任何本身特性(包括隱藏的特性)。

這里是三件真正觸動(dòng)我的事情。這三件真正的大事,對(duì)我而言,只會(huì)讓我更加偏好MooTools。

#p#

每個(gè)人在某些事情上都是一只菜鳥(niǎo)

***件大 事就是:使用框架的許多人(可能不是全部、或者絕大多數(shù)甚至只有三分之一——誰(shuí)知道呢)都不這樣認(rèn)為。MooTools的用戶,jQuery的用 戶,YUI的用戶,他們只是去寫(xiě)代碼讓頁(yè)面去做他們想做的事情(要說(shuō)清楚的是:直到今年年初,我用這種方式寫(xiě)了許多代碼——但是現(xiàn)在我寫(xiě)的每個(gè)東西救護(hù)都 是一個(gè)類(lèi))。這些人為他們能在瀏覽器里做的那些事情感到激動(dòng),為他們的網(wǎng)站有多么有趣、強(qiáng)大、流暢、可用等等任何事情而激動(dòng)。當(dāng)他們需要重構(gòu)的時(shí)候,這將 會(huì)非常的痛苦,不過(guò)他們還是很高興——至少比沒(méi)有東西好。

我認(rèn)為現(xiàn)在可以安全地 說(shuō),在那些框架中,jQuery讓這中體驗(yàn)變得非常容易切入。它是如此完整地模糊了瀏覽器,而在很多方面又是如此地像CSS,就像一劑入門(mén)毒藥。你做了一 點(diǎn)點(diǎn),然后你就再也不能停止。如果jQuery沒(méi)有完成其他任何東西,只是把JavaScript介紹給那些人然后讓他們堅(jiān)持使用,這就是個(gè)不小的成就。

但是我們最終還是要學(xué)習(xí)

第二件大事 對(duì)我來(lái)說(shuō)變得很明顯,無(wú)論遲早,人們?cè)絹?lái)越熟練地用這種方式寫(xiě)代碼,當(dāng)他們寫(xiě)的時(shí)候,他們會(huì)想變得更有效率。他們可能不會(huì)選擇跟我現(xiàn)在一樣的道路——那些 框架的數(shù)目已經(jīng)說(shuō)明那里有很多方式去給這只貓上色。但是他們將會(huì)度過(guò)這樣一個(gè)階段:“嗨,你看,我能做一個(gè)流暢的Ajax登陸框了!”然后他們會(huì)想著去開(kāi) 始開(kāi)發(fā)一些更加容易重用、容易維護(hù)和容易擴(kuò)展的代碼。在那個(gè)時(shí)候,他們將會(huì)重新閱讀“Crockford的書(shū)”,然后反問(wèn)自己為什么他們不在那里做一些工作呢?

再說(shuō)一遍,不管你在用什么框架,這都會(huì)發(fā)生。第1步:學(xué)習(xí)JavaScript基本語(yǔ)法。第2步:學(xué)習(xí)利用 框架做一些有趣的效果或者ajax應(yīng)用。第4步(譯者注:貌似是第3步,不過(guò)不必較真)到719步:犯一大堆很愚蠢的錯(cuò)誤并學(xué)習(xí)一些東西。第720步:真正掌握J(rèn)avaScript然后很蔑視地回頭看看你以前的工作。

在框架中,要緊的是它里面的東西

這個(gè),最終,把我?guī)蛄说谌笫?。這個(gè)事件讓我確定了我對(duì)MooTools的選擇。所有的框架都變得日益相似。即有一天他們最終會(huì)看起來(lái)像這些東西:

  1. fetch(element).verb(details).verb(details).verb(details)  

唯一的真正區(qū)別只是他們的術(shù)語(yǔ)不一樣。一個(gè)框架可能使用$,另外一個(gè)可能做同樣的事情,例如Y.get或者jQuery(id),未來(lái)的框架只是使用了同意 的不用詞匯而已。在邊緣,他們都做同樣的事情。這是因?yàn)槲覀兌急舜丝吹搅藢?duì)方工作中好的模式然后加以吸收——再重申一遍,我們?nèi)吭诤屯粋€(gè)東西做斗爭(zhēng) ——瀏覽器——為了同樣的目的。

但是在核心深處,他們是各不相同的。這些框架的開(kāi)發(fā)者不會(huì)花大量的時(shí)間來(lái)寫(xiě)一個(gè)讓登陸框變化的代碼。當(dāng)然,他們?yōu)楦髯缘捻?xiàng)目完成這樣的工作,這些框架本身的工作在內(nèi)部進(jìn)行。 遲早,任何人開(kāi)始學(xué)習(xí)其中的一個(gè)框架,就會(huì)接觸到邊緣代碼,然后就會(huì)想去利用核心的代碼。他們會(huì)重新閱讀“Crockford的書(shū)”并想:“我在用很困難 的方式做這個(gè)——我不停地重復(fù)太多了,那個(gè)東西和我昨天寫(xiě)的東西幾乎一樣,雖然不完全一樣。那里肯定有更好的方式。”像Bill Scott這樣的人已經(jīng)在做這些了,但是每個(gè)剛剛開(kāi)始的人還深深地銘記著從屏幕上看到的那些絢麗的東西(當(dāng)然,他們應(yīng)該這樣)。

當(dāng)他們真的夠好并且已經(jīng)準(zhǔn)備好去實(shí)施下一步的時(shí)候,他們將會(huì)看看他們庫(kù)的內(nèi)核來(lái)進(jìn)行選擇。無(wú)論開(kāi)始使用什么框架,在幾個(gè)月 之后,他們寫(xiě)出了代碼,他們會(huì)期待那些框架專(zhuān)家的答案,專(zhuān)家們正在寫(xiě)內(nèi)核。每個(gè)框架都有開(kāi)發(fā)插件和對(duì)其進(jìn)行擴(kuò)展的機(jī)制,我承認(rèn)我只是在一定程度上熟悉其中 的一部分。我不能對(duì)他們給出任何評(píng)價(jià)除了MooTools,因此我將對(duì)那些東西約束我的言論。幾乎所有的MooTools的功能性的東西都是通過(guò)擴(kuò)展本地對(duì)象(數(shù)組、字符串等)或者類(lèi)實(shí)現(xiàn)的。貫穿整個(gè)庫(kù)的主要(淺)繼承和重用都通過(guò)易讀和易用的方式得到了證明。正是因?yàn)槿绱?,我自己的代碼也比以前要好得多了。

為什么MooTools有震撼力

現(xiàn)在,當(dāng)人們問(wèn)我為什么我覺(jué)得MooTools是更好的選擇,我仍然會(huì)告訴他們:不是什么這個(gè)框架好于其它框架,所有的框架都是好的選擇,對(duì)于我個(gè)人而言, 選擇MooTools的原因僅僅只是因?yàn)槲夷茏罱K用語(yǔ)言表現(xiàn)出來(lái)一些東西。所有的框架都用不同的方式達(dá)到了類(lèi)似的目的,但是,至少對(duì)于我而言,MooTools再一次幫助我解決了我的設(shè)計(jì)和實(shí)現(xiàn)挑戰(zhàn),這就是我足夠明確的理由。

原文作者:MooTools Team

原文地址: http://techmemo.org/2008/10/06/jquery-mootools-which-is-the-most-popular-and-well-represented-framework-and-what-really-makes-one-framework-different-from-another.html

【編輯推薦】

  1. Django創(chuàng)始人:從技術(shù)工藝上考量jQuery
  2. jQuery讓開(kāi)發(fā)者戀戀不舍的秘密
  3. jQuery開(kāi)發(fā)者:你真的需要一個(gè)插件嗎? 

 

責(zé)任編輯:王曉東 來(lái)源: fdream's博客
相關(guān)推薦

2011-07-28 10:11:15

iPadAndroid平板

2011-10-31 09:26:10

jQuery

2021-08-12 10:06:31

數(shù)據(jù)合規(guī)數(shù)據(jù)安全網(wǎng)絡(luò)安全

2016-11-04 19:58:39

vue.js

2016-04-18 18:22:06

2013-01-22 11:15:40

GitHub

2020-10-12 10:06:26

技術(shù)React代數(shù)

2011-03-04 10:06:37

BUG

2023-07-27 07:46:51

SAFe團(tuán)隊(duì)測(cè)試

2012-04-11 14:04:26

創(chuàng)業(yè)開(kāi)發(fā)

2012-01-11 13:08:39

移動(dòng)商務(wù)項(xiàng)目團(tuán)隊(duì)成員組成

2023-07-22 00:33:07

React團(tuán)隊(duì)數(shù)據(jù)

2016-10-10 22:48:16

2012-05-30 09:12:46

NodeJSRubyRails

2019-07-24 09:00:51

Windows 7Windows微軟

2009-07-29 09:35:07

谷歌離職

2013-04-02 09:22:49

項(xiàng)目管理

2011-06-08 13:10:58

Fedora 15 Ubuntu 11.

2013-07-25 14:31:10

產(chǎn)品

2011-06-16 08:22:04

JavaScriptjQuery
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)