我去过这个线程,但没有找到我的答案。 如何创建包装器
我的问题是如何为 jquery ajax 之类的 jquery 函数创建一个包装器,以及它是如何工作的。
如果有人可以提供一个小提琴或一个非常简单的包装 jquery ajax 的示例,我将不胜感激。
谢谢你。
我去过这个线程,但没有找到我的答案。 如何创建包装器
我的问题是如何为 jquery ajax 之类的 jquery 函数创建一个包装器,以及它是如何工作的。
如果有人可以提供一个小提琴或一个非常简单的包装 jquery ajax 的示例,我将不胜感激。
谢谢你。
如果您不断地做同样的事情来修改现有方法,则包装器很有用。假设您使用$.get了很多,但每次都必须为数据添加一个键。写一个包装器。
$.fn.extend({betterget: function(url, data, success, dataType) {
data['key'] = 'foo';
$.get(url, data, success, dataType);
}});
因此,您可以将呼叫从 更改为$.get(...),$.betterget(...)并且将始终设置该流行键。
这就是它的全部内容。其余的取决于您的想象力和需求。
编辑
“我可以只使用纯 javascript 而不是 jquery 代码来创建包装器吗?”
当然:
function betterget(url, data, success, dataType) {
data['key'] = 'foo';
$.get(url, data, success, dataType);
}
这使您能够调用betterget,它将为您完成 jquery 工作。
我可以只使用纯 javascript 而不是 jquery 代码来创建包装器吗?谢谢朋友的回答,很有帮助
像这样?
var ajax = (function ($) {
return function () {
return $.ajax.apply($, arguments);
};
})(jQuery);
如果不真正了解您为什么要创建包装器以及您期望从该包装器中得到什么,就无法真正回答这个问题?
上面的ajax 包装器只是一个将其工作委托给$.ajax. 基本上就像现在一样,它几乎与doing 相同var ajax = $.ajax;,唯一的区别是在调用时该this值将被正确绑定。$$.ajax
包装器可以是很多东西,但大多数时候它充当适配器,基本上是一个为不兼容对象提供统一接口的对象。
$.ajax它本身就是这种模式的完美示例,因为它处理跨浏览器问题,例如不支持标准XMLHttpRequest对象的浏览器。
您还可以使用包装器来模拟AOP功能,这对于横切关注点非常有用。