在jQuery里面的空花括号

时间:2015-03-25 17:57:52

标签: jquery

在摘录中, $({}).queue(function(next){})  $({})代表什么?为什么人们使用这种形式?

我从this answer here on SO获得了代码。

3 个答案:

答案 0 :(得分:4)

更新了答案

您引用comment below代码的this answer更改了显着的内容。

答案中的代码:

$(document)
  .queue(callMe1)
  .queue(callMe2);

...然后有评论建议使用{}代替document

$({})
  .queue(callMe1)
  .queue(callMe2);

你会这样做来设置一个调用链,其中链中的后续调用不会发生,直到之前的调用说它们已经完成。他们所做的可以是同步或异步。这是一种早期的承诺形式。

让我们举一个例子:假设我想要一个接一个地做三件事,而且这些事情中的每一件都可能会或可能不会像动画一样异步。我们可以这样做:

$({}).queue(theFirstThing)
     .queue(theSecondThing)
     .queue(theThirdThing);

......以后的函数在早期函数说完之后才会被调用。

示例:

$({}).queue(theFirstThing)
     .queue(theSecondThing)
     .queue(theThirdThing);

function theFirstThing(next) {
  // What I do is asynchronous: Fade out the a1 element,
  // then call the next function in the chain if any
  $("#a1").fadeOut("slow", next);
}
function theSecondThing(next) {
  // What I do is synchronous
  $("<p>Hi there</p>").appendTo(document.body);
  
  // Chain to next if any
  next();
}
function theThirdThing(next) {
  // What I do is asynchronous: Fade out the a2 element,
  // then call the next function in the chain if any
  $("#a2").fadeOut("slow", next);
}
<div id="a1">a1</div>
<div id="a2">a2</div>
<div id="a3">a3</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>


原始答案

The documentation告诉我们:

  

jQuery(对象)

     

<强>对象   
  类型:PlainObject   
  包装在jQuery对象中的普通对象。

例如,它围绕一个普通对象包装一个jQuery实例。我们习惯于将jQuery实例包含在一个或多个DOM元素中,但它们也可以包含在其他东西中。

然后他们在生成的jQuery对象上执行queue

  

.queue([queueName],回调)

     

<强> QUEUENAME   
  类型:字符串   
  包含队列名称的字符串。默认为fx,标准效果队列。

     

<强>回调   
  类型:功能(函数next())   
  要添加到队列的新函数,其函数是调用将使下一个项目出列的函数。

这告诉我们它在做什么:围绕普通对象包装jQuery对象,然后调用queue将某些内容放入该jQuery对象的默认动画队列中,即使其中没​​有要动画的元素也是如此

  

为什么人们会使用这种形式?

我从未见过这种用法。我在你的问题中没有想到使用它的任何理由,它只是在queue调用期间立即调用该函数,我们可以在这里看到:

$({}).queue(function(next){
  snippet.log("Function called");
  next();
});
snippet.log("queue call complete");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

答案 1 :(得分:1)

我在实例化一个稍后将被真正的JQuery对象替换的变量之前使用过$({}),这样在意外结果的情况下,原始值仍然是一个有效的JQuery对象。在这种情况下可能没有必要。

经过检查,$()和$({})之间的一个主要区别是.length的值。分别为0和1。好问题和谈话。 1

答案 2 :(得分:-2)

每当没有上下文传递给jQuery对象时,上下文就是 设置为'文档'。由于$()没有上下文,因此上下文 默认为文档。与$([])和$({})相同。