Почему мы используем "({})" в jQuery?

Почему мы используем ({ })?

Это делегирование?

Что означает использовать этот синтаксис?

Что мы обертываем с ним?

Например:

$.ajaxSetup ({ // <-- THIS
    error: fError,
    compelete: fComp,
    success: fSucc
}); // <-- AND THIS

Ответ 1

{} - это обозначение объекта в JavaScript. Например:

$('selector').plugin({ option1: 'value' });

В этом случае вы передаете объект, содержащий ваши настройки, в плагин. Плагин может рассматривать это как объект, независимо от того, на что он ссылается, например:

settings.option1 //the option you passed in.

Конечно, у него гораздо больше применений, но это самый распространенный пример в jQuery. То же самое верно для .animate(), $.ajax(), .css() и т.д. Все, что принимает свойства, обычно использует этот формат.


В соответствии с запросом, некоторые другие примеры:
Любой объект внутри переданного объекта может быть также функцией, а не только свойствами, например:

$("<input>", {
  type: "text",
  focusin: function() { alert("Hi, you focused me!"); }
});    

Это установило бы фокусное событие этого входа для предупреждения. Другой - это расширение объекта, добавление к нему свойств, например:

var person = { first_name: "John" };
$.extend(person, { last_name: "Smith" });
//equivalent to: 
person.last_name = "Smith";
//or:
person["last_name"] = "Smith";

Теперь person имеет свойство last_name. Это часто используется также плагинами, чтобы использовать настройки по умолчанию, затем объединить все параметры, которые вы передали, переписать с любыми параметрами, которые вы указали, используя значения по умолчанию для остальных.

Почему мы его используем? Хорошо... то, как работает JavaScript, и в стиле jQuery: это чрезвычайно точный и гибкий способ передачи информации.

Ответ 2

Я имею в виду, что мы его обертываем?

Нет. Это обозначение объекта JavaScript (JSON). В вашем примере вы вызываете функцию ajaxSetup с объектом, чьи свойства:

error: fError,
compelete: fComp,
success: fSucc

Например, чтобы создать "пользовательский" объект, который вы могли бы написать:

user = { 
    "name":"Oscar", 
    "lastName":"Reyes"
};

И затем используйте один из его атрибутов:

alert( a.name );

Показывает: Оскар

То, что вы видите там (в вашем коде), - это создание объекта и передача его в качестве аргумента.

Это будет эквивалентно:

var setUpInfo = {
    "error": fError,
    "compelete": fComp,
    "success": fSucc
};  

$.ajaxSetup( setUpInfo );

Ответ 3

Это либо литерал объекта JavaScript, или, более конкретно, JSON, когда дело доходит до отправки параметров через Ajax. JSON - это подмножество литералов объектов JavaScript.

Например:

// This is JSON data sent via the Ajax request (JSON is subset of JavaScript object literals)
var json = {id: 1, first_name: "John", last_name: "Smith"};

// This is a JavaScript object literal, it is not used for transfer of data so doesn't need to be JSON
var jsol = {type: 'POST', url: url, data: json};

$.ajax(jsol);

Подробнее об этом читайте здесь:

Ответ 4

Вопрос был о нотации "({})".

В этом контексте круглые скобки "(...)", следующие за выражением, такие как $.ajaxSetup, вызывают функцию, указанную выражением, которое вызывается.

Выражение внутри круглых скобок (которое может быть списком выражений, разделенных запятыми) приводит к значению (или списку значений), которое является аргументом (аргументами), переданным функции.

Наконец, когда "{...}" используется в контексте выражения, он создает объект с указанными свойствами имени. Это похоже на JSON, но это, в общем, любой законный JS-объект литерала.

Ответ 5

Если вы имеете в виду в этом контексте:

$("#theId").click( function() { /* body here */ } );

Тогда ( function() {}) является анонимной функцией. Но без примера не может быть уверен, что вы имеете в виду.