Почему мы используем "({})" в jQuery? - PullRequest
77 голосов
/ 07 апреля 2010

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

Это делегат?

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

Что нам с этим обернуть?

Например:

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

Ответы [ 5 ]

157 голосов
/ 07 апреля 2010

{} - это обозначение объекта в 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: это чрезвычайно краткий и гибкий способ передачи информации.

10 голосов
/ 07 апреля 2010

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

Нет. Это нотация объектов 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 );
7 голосов
/ 07 апреля 2010

Это либо литерал объекта 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);

Пожалуйста, прочитайте больше об этом здесь:

6 голосов
/ 08 апреля 2010

Вопрос был по поводу обозначения "({})".

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

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

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

4 голосов
/ 07 апреля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...