$ .Deferred与新的$ .Deferred

may*_*rop 9 jquery jquery-deferred

有什么区别

var dfd = new $.Deferred
Run Code Online (Sandbox Code Playgroud)

var dfd = $.Deferred
Run Code Online (Sandbox Code Playgroud)

在哪些情况下你需要使用新的vs不使用它?

Pra*_*eep 9

jQuery官方文档说:

"jQuery.Deferred()构造函数创建一个新的Deferred对象.new运算符是可选的."

因此,我认为使用方式明智,无论是从Deferred创建新对象还是按原样使用它都没有任何区别.


Aru*_*hny 8

这两个不相等,一个创建一个diferred对象而另一个创建一个别名

var dfd = new $.Deferred
Run Code Online (Sandbox Code Playgroud)

它创建了一个延迟对象实例,用于创建新实例,不需要使用新关键字 - 您可以这么说 var dfd = $.Deferred()

var dfd = $.Deferred
Run Code Online (Sandbox Code Playgroud)

它为该类型创建别名 $.Deferred

所以我认为没有必要在任何地方使用第二种格式,如果你想创建一个快捷方式.您可以使用第一种格式来创建延迟对象的新实例

  • APJ,我想知道这可能是一个说明所有四种可能性返回的东西的好地方; `new $ .Deferred`,`new $ .Deferred()`,`$.Deferred`,`$ .Deferred()`.目前,您的答案提供了75%的信息.只需要最后25%,并以列表形式或每个可能性一个表示. (3认同)
  • @downvoter不要混淆`$ .Deferred()`和`$ .Deferred`它们不相等 (2认同)

Bob*_*ein 5

这些是相同的:

var dfd1 = $.Deferred();
var dfd2 = new $.Deferred;
var dfd3 = new $.Deferred();
Run Code Online (Sandbox Code Playgroud)

每个创建一个新的Deferred对象。 new是可选的,因为 $.Deferred 是一个工厂函数

这大概是废话:

var wtf = $.Deferred;
Run Code Online (Sandbox Code Playgroud)

正如@ArunPJohny 指出的,它只是给工厂函数取了别名。它不会创建 Deferred 对象。