-
理解觀察者模式:發(fā)布訂閱(Publish/Subscribe)
觀察者的使用場合就是:當一個對象的改變需要同時改變其它對象,并且它不知道具體有多少對象需要改變的時候,就應(yīng)該考慮使用觀察者模式。
JS里對觀察者模式的實現(xiàn)是通過回調(diào)來實現(xiàn)的,作為 $.Callbacks() 的創(chuàng)建組件的一個演示,只使用回調(diào)函數(shù)列表,就可以實現(xiàn) Pub/Sub 系統(tǒng),將 $.Callbacks 作為一個隊列。
查看全部 -
使用回調(diào)函數(shù),總的來說弱化耦合,讓調(diào)用者與被調(diào)用者分開。
調(diào)用者不關(guān)心誰是被調(diào)用者,所有它需知道的,只是存在一個具有某種特定原型、某些限制條件的被調(diào)用函數(shù)
查看全部 -
函數(shù)本質(zhì):簡單的理解函數(shù)本質(zhì)上就是輸入和輸出之間實現(xiàn)過程的映射
理解JS中的函數(shù):
1、能“存儲”在變量中
2、能作為函數(shù)的實參被傳遞
3、能在函數(shù)中被創(chuàng)建
4、能從函數(shù)中返回
理解JS中的回調(diào)函數(shù):
1、使用回調(diào)函數(shù)方便異步處理,例如AJAX
2、要求執(zhí)行某些操作后執(zhí)行回調(diào)函數(shù)
查看全部 -
$.each()函數(shù)和$(selector).each()是不一樣的,后者是專門用來遍歷一個jQuery對象的,是為jQuery內(nèi)部服務(wù)的。
$.each()函數(shù)可用于迭代任何集合,無論是“名/值”對象(JavaScript對象)或數(shù)組。
jQuery的實例方法最終也是調(diào)用的靜態(tài)方法。
查看全部 -
迭代器設(shè)計:迭代器是一個框架的重要設(shè)計。我們經(jīng)常需要提供一種方法順序用來處理聚合對象中各個元素,而又不暴露該對象的內(nèi)部,這也是設(shè)計模式中的迭代器模式(Iterator)
查看全部 -
通過eq方法只能產(chǎn)生一個新的對象,但是如果需要的是一個合集對象要怎么處理:
使用.slice( start [, end ] )
查看全部 -
get與eq的區(qū)別:
eq返回的是一個jQuery對象,get返回的是一個DOM對象
查看全部 -
end與addBack的鏈式屬性:
新jQuery對象添加prevObject屬性,我們看到prevObject其實還是當前jQuery的一個引用罷了,所以也就是為什么通過prevObject能取到上一個合集的原因了
查看全部 -
回溯處理的設(shè)計:
1、.end():可以回溯到之前的Dom元素集合,prevObject
2、.addBack():調(diào)用它會在棧中回溯一個位置,然后把兩個位置上的元素集組合起來,并把這個新的、組合之后的元素集推入棧的上方。
利用這個DOM元素??梢詼p少重復的查詢和遍歷的操作,而減少重復操作也正是優(yōu)化jQuery代碼性能的關(guān)鍵所在。
查看全部 -
插件接口的設(shè)計:接口自定義擴展
jQuery.extend({ ????data:function(){}, ????removeData:function(){} }) jQuery.fn.extend({ ????data:function(){}, ????removeData:function(){} })
查看全部 -
jQuery.extend( object ) 表示將object合并至jQuery上
jQuery.extend( target, object1, object2) 表示將object1, object2合并至target上
這也是target如下設(shè)置的原因
?var?target?=?arguments[0]?||?{}, ?????i?=?1, ?????length?=?arguments.length; //只有一個參數(shù),就是對jQuery自身的擴展處理 if?(i?===?length)?{???????? ????target?=?this;?//調(diào)用的上下文對象jQuery/或者實例 ????i--; }
查看全部 -
jQuery的Internal DSL形式帶來的好處
1、編寫代碼時,讓代碼更貼近作者的思維模式;
2、閱讀代碼時,讓讀者更容易理解代碼的含義;
3、應(yīng)用DSL可以有效的提高系統(tǒng)的可維護性(縮小了實現(xiàn)模型和領(lǐng)域模型的距離,提高了實現(xiàn)的可讀性)和靈活性,并且提供開發(fā)的效率
jQuery的這種管道風格的DSL鏈式代碼,總的來說:
1、節(jié)約JS代碼;
2、所返回的都是同一個對象,可以提高代碼的效率。
通過簡單擴展原型方法并通過return this的形式來實現(xiàn)跨瀏覽器的鏈式調(diào)用。
但是這種方法有一個問題是:所有對象的方法返回的都是對象本身,也就是說沒有返回值,所以這種方法不一定在任何環(huán)境下都適合
查看全部 -
DSL是指Domain Specific Language,也就是用于描述和解決特定領(lǐng)域問題的語言
DSL分為內(nèi)部DSL和外部DSL。
jQuery屬于內(nèi)部DSL。外部DSL需要編寫解析器。
查看全部 -
靜態(tài)與實例方法共享設(shè)計:實例方法取于靜態(tài)方法
function?jQuery()?{...} jQuery.each?=?function(){...} jQuery.prototype?=?{ ????each:?function(?callback,?args?)?{ ????????return?jQuery.each(?this,?callback,?args?); ????} }
查看全部 -
jQuery分離構(gòu)造器
- 不使用new 構(gòu)造對象
- 為了避免死循環(huán),將jQuery原型上的init方法作為構(gòu)造函數(shù),init中的this完全引用不到j(luò)Query的原型,所以這里通過new把init方法與ajQuery給分離成2個獨立的構(gòu)造器
- 為什么init一定要放在jQuery原型上,單獨寫不好嗎?
查看全部
舉報