jQuery是Decorator设计模式的实现吗?

时间:2011-01-25 09:54:02

标签: javascript jquery design-patterns

它装饰物体,所以我认为它是,但我不确定。

例如

jQuery(document).hide()

通过添加额外样式来更改文档对象。

修改

如果它不是装饰设计模式?它是什么呢?它必须有一个模式名称!

4 个答案:

答案 0 :(得分:4)

它不会向现有对象添加新行为。它只是创建一个新对象,其中包含现有对象作为其值之一。它通过不同的API镜像现有对象的许多功能,并允许公共访问现有对象。

要使它成为正确的装饰,您应该能够访问传入的DOM对象的所有方法和值,而无需通过不同的API或无需手动访问底层装饰对象。

答案 1 :(得分: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甚至似乎只能以其动画功能等方式适合装饰器模式。普通的HTML DOM元素不提供定时动画和附加队列,因此jQuery补充说。在大多数其他领域,jQuery通过直接访问底层DOM元素提供了相同的功能。

但即便如此,它确实不合适,因为jQuery不是“动态保持相同的界面。”

答案 2 :(得分:0)

我认为你可以这样称呼它,因为JQuery能够通过id抓取html元素,并使用javascript函数,ajax和其他功能对它们进行decoracets。

答案 3 :(得分:0)

不,不是你在想的意思。 jQuery 插件经常使用装饰器模式,但核心库没有。

当你调用像$(document)这样的jQuery选择器时,它会返回一个jQuery对象的新实例,它只引用原始的document对象。