В фотке, $({}).queue(function(next){})
Что делает $({})
? Почему люди используют эту форму?Пустые фигурные скобки внутри jQuery
У меня есть код от this answer here on SO.
В фотке, $({}).queue(function(next){})
Что делает $({})
? Почему люди используют эту форму?Пустые фигурные скобки внутри jQuery
У меня есть код от this answer here on SO.
Обновлено Ответ
Ваш 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, но они также могут быть обернуты вокруг других вещей.
Затем они делают queue
на результирующем JQuery объекта:
.queue ([ИмяОчереди], обратного вызова)
ИмяОчереди
Тип: String
A строка, содержащая имя очереди. По умолчанию fx, стандартная очередь эффектов.обратного
Тип: Function (Функция следующей())
Новая функция для добавления в очередь, с помощью функции для вызова, который будет из очереди следующий пункт.
Так что говорит нам, что он делает: Обертывание объекта 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>
Всякий раз, когда контекст не передается объекту jQuery, контекст устанавливается в «документ». Поскольку $() не имеет контекста, контекст затем по умолчанию ссылается на документ. То же самое с выполнением $ ([]) ans $ ({}).
Раньше я использовал $ ({}), когда создавал экземпляр переменной, которая позже будет заменена реальным объектом JQuery, так что в случае неожиданного результата исходное значение все еще является допустимым объектом JQuery. В этом случае это может и не понадобиться.
При проверке одним существенным отличием между $() и $ ({}) является значение .length. 0 и 1 соответственно. Хороший вопрос и беседа. +1
* «В этом случае это может быть и не нужно». * Это не так, просто используйте '$()'. –
Это, безусловно, странно. Спасибо, T.J.! –
да T.J. Я нашел его здесь http://stackoverflow.com/questions/5230333/how-to-avoid-callback-chains/5230395#5230395 –
@JenniferMassey: '$ (document) .queue (...)' is ** очень разные ** из '$ ({}). queue (...)' и несколько вызовов '.queue' меняют вещи только из одного. Я думаю, что этот вопрос и его ответ объясняют, почему они используют это достаточно хорошо. –