Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery库中使用的设计模式_Javascript_Jquery_Design Patterns - Fatal编程技术网

Javascript jQuery库中使用的设计模式

Javascript jQuery库中使用的设计模式,javascript,jquery,design-patterns,Javascript,Jquery,Design Patterns,jQuery高度关注DOM,并围绕它提供了一个很好的抽象。在这样做的过程中,它利用了昨天刚刚击中我的各种众所周知的信息。一个明显的例子就是模式。jQuery对象围绕常规DOM对象提供了新的和附加的功能 例如,DOM有一个本机方法,但没有相应的insertAfter方法。有多种实现可以填补这一空白,jQuery就是这样一个库,它提供了以下功能: $(selector).after(..) $(selector).insertAfter(..) 在jQuery中大量使用装饰器模式还有许多其他示例

jQuery高度关注DOM,并围绕它提供了一个很好的抽象。在这样做的过程中,它利用了昨天刚刚击中我的各种众所周知的信息。一个明显的例子就是模式。jQuery对象围绕常规DOM对象提供了新的和附加的功能

例如,DOM有一个本机方法,但没有相应的insertAfter方法。有多种实现可以填补这一空白,jQuery就是这样一个库,它提供了以下功能:

$(selector).after(..)
$(selector).insertAfter(..)
在jQuery中大量使用装饰器模式还有许多其他示例

您注意到库本身还包含哪些设计模式的其他示例(大或小)?另外,请提供该模式的使用示例


我相信人们喜欢jQuery的各种东西都可以追溯到众所周知的设计模式,只是这些模式通常不以模式的名称来引用。这个问题没有一个答案,但对这些模式进行编目将有助于深入了解库本身。

关于YUI的这篇文章中讨论的单例/模块模式如何:

我相信jQuery在其核心中使用了这种模式,并鼓励插件开发人员使用这种模式。使用此模式是保持全局名称空间不混乱的一种方便而有效的方法,通过帮助开发人员编写干净、封装的代码,这一方法更加有用。

此模式在jQuery中也非常常用。通过与其他库的合作,我可以看出这种模式并不像乍一看那么明显。模式基本上是这样的,

一组对象的处理方式与对象的单个实例相同

例如,当处理单个DOM元素或一组DOM元素时,两者都可以统一处理

$('#someDiv').addClass('green'); // a single DOM element

$('div').addClass('green');      // a collection of DOM elements


在函数式编程中,jQuery是一个Monad。Monad是一种结构,它将对象传递给动作,返回修改后的对象并将其传递给下一个动作。就像一条装配线


jQuery在其核心的各个地方都使用了模块模式,并且还向插件开发人员推荐了它,而不仅仅是简单的插件。很好的发现:)那里的工作很好:)。。我认为,
$.ajax
的Facade模式与此模式相似,因为我们有基本功能,每个附加的方法,如
$.get
都会覆盖基础并使其更加具体。是的,很多jQuery方法和实际上的JavaScript通常可以同时符合无数的设计模式。这是JavaScript总体表达能力以及函数式编程如何补充面向对象编程的最好例子我认为monad在这里意味着图书馆的链接能力!这正是我在这里描述的。
$(document).ready(function(){
    $('div.app').myPlugin();
});
$('div').css({
    opacity: .1 // opacity in modern browsers, filter in IE.
});
// higher level interfaces (facades) for $.ajax();
$.getJSON();
$.get();
$.getScript();
$.post();
// jQuery utilizes it's own event system implementation on top of DOM events.
$('div').click(function(){})
$('div').trigger('click', function(){})
$.each(function(){});
$('div').each(function(){});
$('div').toggle(function(){}, function(){});
$.proxy(function(){}, obj); // =oP
$('<div class="hello">world</div>');
// this feels like cheating...
$.fn.plugin = function(){}
$('div').plugin();
// CONFIG is shared
$.fn.plugin = function(CONFIG){
     CONFIG = $.extend({
         content: 'Hello world!'
     }, CONFIG);
     this.html(CONFIG.content);
}