【问题标题】:How do I create a jQuery plugin extending $.Deferred?如何创建扩展 $.Deferred 的 jQuery 插件?
【发布时间】:2015-06-12 00:58:22
【问题描述】:

我想用一种新方法扩展$.Deferred,该方法应该具有类似于Deferred.fail() 的签名。最好的方法是什么?

【问题讨论】:

  • 因为 Defered 是一个对象而不是一个小部件,你可以用 $,Deffered.prototype.newFunc = function(){} 扩展它
  • @Dan Kuida 您的建议似乎不起作用:jsfiddle.net/alexarg/9c1f5rmj
  • 首先在您发送的小提琴中,$.Deferred 没有定义。其次,您真正希望 si 扩展 $.Deferred() 返回的内容,而不是 $.Deferred 本身。有一个选项可以传递参数并在一次执行时扩展它 var def = $.Deferred(function(){this.test = function(){alert("test")}});因此,为了覆盖该函数的构造函数,您需要在其中插入上述方法。
  • 我不同意,$.Deferred 是在 jsfiddle 中定义的。但是你说得对,我需要扩展 Deferred 函数返回的对象,而不是扩展函数本身。您关于传递函数的建议仅适用于使用函数参数创建的延迟对象,而我想为所有延迟对象启用该函数。

标签: jquery jquery-plugins jquery-deferred


【解决方案1】:

找到了一种方法。

我正在用一个新函数覆盖 $.Deferred,该函数调用基本函数并使用新方法扩展它返回的对象:

$._Deferred = $.Deferred;
$.Deferred = function (param) {
    var deferredToExtend = $._Deferred(param);

    deferredToExtend.test = function (param) {
        var deferred = $.Deferred();
        deferredToExtend.always(deferred.resolve.bind(deferred, param));
        return deferred.promise();
    };

    return deferredToExtend;
};

这里是jsfiddle

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 2017-11-27
  • 2012-11-25
  • 2011-08-14
  • 1970-01-01
  • 2010-11-12
  • 2010-12-25
相关资源
最近更新 更多