2011-01-25 47 views
4

它裝飾的對象,所以我認爲這是,但我不知道。jQuery是Decorator設計模式的實現嗎?

例如

jQuery(document).hide() 

改變通過增加額外的樣式的文檔對象。

編輯:

如果它不是裝飾設計模式?比它是什麼?必須有一個模式名稱!

+0

http://stackoverflow.com/questions/3631039/design-patterns-used-in-the-jquery-library – 2011-03-24 23:07:32

回答

1

jQuery最適合facade pattern,因爲它「定義使子系統更易於使用的更高級別的接口」。例如,.css().hide()是專爲易用性的特點,所以是jQuery的同時執行多個元素的動作能力:

$('.foo').css({left: '100px', top: '100px'}).hide(); // jQuery 

// Pure JavaScript 
for(var a = document.getElementsByClassName('foo'), i = 0; i < a.length; ++i) { 
    a[i].style.left = '100px'; 
    a[i].style.top = '100px'; 
    a[i].style.display = 'none'; 
} 

jQuery的只有偶數似乎符合Decorator模式在這樣的方式作爲其動畫功能。普通的HTML DOM元素不提供時間動畫和附加隊列,所以jQuery增加了這個功能。在大多數其他領域,jQuery提供了與直接訪問底層DOM元素相同的功能。

但即使在那裏,它確實不適合,因爲jQuery不是「動態保持相同的接口」。

0

我認爲你可以這樣稱呼它,因爲JQuery能夠通過id來抓取html元素,並使用javascript函數,ajax和其他特性來裝飾它們。

+1

不完全是。它實際上創建了一個具有相關HTML元素集合的新對象。它不直接修飾具有附加功能的HTML元素。 – 2011-01-25 10:03:53

4

它不會將新行爲添加到現有對象。它只是創建一個包含現有對象作爲其值之一的新對象。它通過不同的API鏡像現有對象的許多功能,並允許公共訪問現有對象。

因爲它是一個適當的裝飾,你應該能夠訪問傳入的DOM對象的所有方法和值,而無需通過不同的API或不必手動訪問底層裝飾對象。

0

不,不是你所想的。 jQuery 插件經常使用裝飾器模式,但核心庫沒有。

當您調用像$(document)這樣的jQuery選擇器時,它將返回一個jQuery對象的新實例,該實例僅引用原始的document對象。