觀察者模式又稱發布-訂閱(Publish/Subscribe)模式、模型-視圖(Model/View)模式、源-監聽器(Source/Listener)模式或從屬者(Dependents)模式。觀察者模式定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽一個主題對象。這個主題對象在狀態上發生變化時,會通知所有觀察者,使它們能夠自動更新自己。下面拿老外的例子改一改,練練手。 var dom = { each : function(obj,fn,score){
這部分說一下最近非常流行的事件代理。事件代理的實現簡單來說,是把事件綁定到目標元素的祖先元素上,然後通過冒泡或捕獲得到事件來源,然後再判定事件來源是否等於目標元素再執行回呼函數。由於對目標元素的判定有時非常模糊,因此通過判定即可調用回呼函數,這樣,我們就達到一個監聽器為許多事件來源服務的目的。對於效能一向非常不怎麼樣的IE6來說,實在幫了一個大忙。假如,有一個無序列表,點擊彈出它的innerHTML,如果按事件綁定的做法,代碼大概是這樣: var addEvent =
上次說到我們在無菌環境中設計了一個事件代理函數,但效能是個問題,解決它我們需要緩衝節點集合,發現節點集合不足以應對新情況時,再替換這個節點集合,重新開始匹配。下面是新的方案: var delegate = function(selector,type,callback){ var els = $(selector); addEvent(document,type,function(e){ var flag = true;
var result = [10] + 1;console.log(result)"101"存在運算子"+",意味著將[10]轉化為一個值,相當於調用其valueOf()方法,而Array的valueOf相當於其toStringvar result = ['a', 'b', 'c'] + "";console.log(result)"a,b,c"與一個Null
在我《惰性函數》一文引起一些爭議,有人總是把惰性函數與緩衝函數(Memoization)混為一談。雖然都是緩衝了結果,但最大的區別是一個改寫函數本身,一個沒有。那我就說一下緩衝函數吧。簡而言之,就是把上次運算的結果放到一個數組或對象中。拿什麼做實驗好呢?就拿那個Fibonacci數列吧,估計IE6會比較嗆,一般5秒運算不了就假死了。我們先看消耗時間,再看結果。一直接用遞迴實現: function fib(n){ if (n == 0 || n == 1)
綜合眾人的意見,此版本做了許多改進,如對注釋抽取的最佳化,增加對script標籤的支援,即時性的測試等等。// dom.abut v2 (annotations-based unit testing by 司徒正美)// http://www.cnblogs.com/rubylouvre/archive/2010/11/08/1868638.html(function(){ //ecma262新擴充 if(!Object.keys){ var _dontEnum =
為公司起草的javascript編程規範,參考了網上的許多資料,尤其是google的規範。現在放出來,希望能拋磚引玉,大家多提寶貴意見。本規範是針對javascript函數式編程風格與公司嚴重依賴於jQuery進行編碼的現實制定出來。禁止使用eval,with與caller(ecma262 v5 的use strict要求)。eval只允許在加密時機器產生。聲明變數必須加上 var