Pytanie Dlaczego używamy "({})" w jQuery?


Dlaczego używamy ({ })?

Czy to jest delegat?

Co to znaczy używać tej składni?

Co to owijamy?

Na przykład:

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

76
2018-04-07 18:00


pochodzenie


stackoverflow.com/questions/1509535/javascript-false-and-false/... jest pozornie nieistotnym pytaniem, ale z odpowiednią odpowiedzią na jedną rzecz może potknąć się. - Crescent Fresh


Odpowiedzi:


{} jest notacją obiektową w JavaScript. Na przykład:

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

W tym przypadku przekazujesz obiekt zawierający twoje ustawienia do wtyczki. Wtyczka może traktować to jako obiekt, niezależnie od tego, do czego się odnosi, na przykład:

settings.option1 //the option you passed in.

Oczywiście ma o wiele więcej zastosowań, ale jest to najczęstszy przykład w jQuery. To samo dotyczy .animate(), $.ajax(), .css() funkcje itp. Wszystko, co ma właściwości, zazwyczaj używa tego formatu.


Na żądanie kilka innych przykładów:
Każdy obiekt wewnątrz przekazanego obiektu może być również funkcją, a nie tylko właściwościami, na przykład:

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

Ustawiłoby to zdarzenie ogniskowania dla tego wejścia, aby uzyskać ostrzeżenie. Innym jest rozszerzenie obiektu, dodanie do niego właściwości, na przykład:

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

Teraz person zawiera last_name własność. Jest to często używane również przez wtyczki, aby pobrać ustawienia domyślne, a następnie scalić wszystkie wprowadzone ustawienia, zastępując wszelkie określone ustawienia, używając wartości domyślnych dla pozostałych.

Dlaczego go używamy?  No cóż ... tak działa JavaScript, a także ducha jQuery: to bardzo zwięzły i elastyczny sposób przekazywania informacji.


156
2018-04-07 18:02



Powiedziałbym, że "dlaczego" pozwala łatwo przekazać zmienną liczbę argumentów do funkcji. (To jest frazowanie, które ma dla mnie największy sens.) - Annika Backstrom
Bardzo dobra odpowiedź, ale jeśli dodasz przykład na temat innych zastosowań, będzie bardzo dobrze. - uzay95
@ Uzay95 - Dodałem kilka dodatkowych przykładów z mojej głowy, jest wiele przypadków do wykorzystania tam. - Nick Craver♦
Bardzo, bardzo, bardzo dobra odpowiedź ... Nauczyłem się wielu rzeczy. Dziękuję bardzo. - uzay95
Spójrz też json.org/js.html dla podobnej składni - RobertPitt


Mam na myśli to, co my pakujemy?

Nie. To jest notacja obiektu JavaScript (JSON). W twoim przykładzie wywołujesz funkcję ajaxSetup z obiektem, którego właściwości to:

error: fError,
compelete: fComp,
success: fSucc

Na przykład, aby utworzyć obiekt "użytkownika", możesz napisać:

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

A następnie użyj jednego z jego atrybutów:

alert( a.name );

Wystawy: Oscar

To, co tam widzisz (w kodzie), to tworzenie obiektu i przekazywanie go jako argumentu.

Byłoby to równoznaczne z:

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

$.ajaxSetup( setUpInfo );

10
2018-04-07 18:10



Tak naprawdę jest nie JSON, który wymaga podania nazw członków. Oczywiście jest to oczywiście poprawny skrypt JavaScript. Powinien również używać twój obiekt użytkownika : zamiast = - friedo
- naprawiony = z: - OscarRyz
Jest to notacja obiektowa JavaScript, ale nie JSON. Tak jak json.org mówi - "JSON jest oparty na podzbiorze języka programowania JavaScript .JSON jest formatem tekstowym, który jest całkowicie niezależny od języka, ale używa konwencji znanych programistom z rodziny języków C, w tym C, C ++, C #, Java, JavaScript, Perl, Python i wiele innych " - Russ Cam


To jest albo Literał obiektów JavaScript lub bardziej szczegółowo JSON, jeśli chodzi o przesyłanie parametrów przez Ajax. JSON jest podzbiorem literałów obiektów JavaScript.

Na przykład:

// 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);

Przeczytaj więcej na ten temat tutaj:


7
2018-04-07 18:02



+1 an pusty struktura json btw - OscarRyz
Byłoby dokładniej powiedzieć, że jest to obiekt napisany literacką składnią obiektu niż "JSON". - Jimmy Cuadra
Jest to dosłowny obiekt JavaScript. To nie jest JSON, ponieważ nie jest zgodny ze składnią JSON (która jest podzbiór składni literalnej obiektu JavaScript). - Quentin


Pytanie dotyczyło zapisu "({})".

W tym kontekście nawiasy "(...)" po wyrażeniu, takim jak $ .ajaxSetup, powodują wywołanie funkcji określonej przez wyrażenie.

Wyrażenie wewnątrz nawiasów (które może być listą wyrażeń rozdzielonych przecinkami) powoduje, że wartość (lub lista wartości) jest argumentem przekazywanym do funkcji.

Na koniec, gdy w kontekście wyrażenia użyto "{...}", konstruuje on obiekt o podanych właściwościach nazwa-wartość. To jest jak JSON, ale bardziej ogólnie, każdy legalny obiekt JS jest dosłowny.


6
2018-04-07 21:19





Jeśli masz na myśli w tym kontekście:

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

A później ( function() {}) jest anonimową funkcją. Ale bez przykładu, nie można mieć pewności, o co ci chodzi.


4
2018-04-07 18:06



To jest jak funkcja delegata, nieprawdaż? - uzay95
simliar. anonimowa funkcja jest zasadniczo "funkcją inline", której nie planujesz ponownie użyć. Możesz korzystać z anonimowej funkcji w dowolnym miejscu, od którego oczekuje się delegata. Właśnie dlatego działa tutaj. funkcja click oczekuje delegata (najprawdopodobniej użyjesz funkcji delegata, jeśli planujesz ponowne użycie funkcji w innym miejscu lub funkcja nie jest naprawdę prosta) - Armstrongest