Dmitry Baranovskiy是何許人也?他是目前世界最優秀的JS開源圖形庫Raphaël的作者,還做了許多JS遊戲自娛,是JS界頂尖高手之一。以下五道題是放於他的部落格上,直到另一個它們被另一個JS高手Nicholas C. Zakas(Yahoo!首頁首席前端工程師)提到,才迅速在網路蔓延開去。大家先試著自己做一下,想不明白才看解析吧。 if (!("a" in window)) { var a = 1; } alert(a); var a =
bind函數,顧名思義,用於為調用函數綁定一個範圍,因為this很容易跟丟它原來所在的範圍,直接指向頂層的window對象。具體結論可參見我另一篇博文《javascript的動態this與動態綁定》。本文專註設計一個無侵入的綁定函數。window.name = "the window object"function scopeTest() { return this.name}// calling the function in global scope:scopeTest()// ->
觀察者模式又稱發布-訂閱(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