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