jQuery是装饰器设计模式的一个实现吗?

4

它可以装饰对象,所以我认为它是可以的,但我不确定。

举个例子:

jQuery(document).hide()

通过添加额外的样式,可以更改文档对象。

编辑:

如果这不是装饰者设计模式?那它是什么?一定有一个模式名称!


https://dev59.com/yHA65IYBdhLWcg3wyh17 - Matt Ball
4个回答

4

它不会给现有对象添加新的行为,而只是创建一个包含现有对象作为其中一个值的新对象。它通过不同的API反映了现有对象的许多功能,并允许公开访问现有对象。

为了成为一个适当的装饰器,您应该能够访问传递进来的DOM对象的所有方法和值,而不需要通过不同的API或手动访问底层装饰对象。


1

jQuery最适合外观模式,因为它确实“定义了一个更高级别的接口,使子系统更易于使用。”例如,.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添加了这个功能。在大多数其他领域,通过直接访问底层DOM元素,jQuery提供了与之相同的功能。

但即使在那里,它也并不完全适用,因为jQuery并没有“动态保持相同的接口”。


0

我认为你可以这样称呼它,因为JQuery能够通过id获取HTML元素,并使用JavaScript函数、Ajax和其他功能进行修饰。


1
不完全正确。它实际上创建了一个包含相关HTML元素的集合的新对象。它不会直接为HTML元素添加额外的功能。 - Robert Koritnik

0
不,不是你想的那种意义上。jQuery插件经常使用装饰器模式,但核心库并没有这样做。
当您调用像$(document)这样的jQuery选择器时,它会返回一个新的jQuery对象实例,该实例仅引用原始的document对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接