2010-04-07 2 views
76

Perché stiamo usando ({ })?Perché stiamo usando "({})" in jQuery?

È delegato?

Che cosa significa utilizzare questa sintassi?

Cosa stiamo avvolgendo?

Ad esempio:

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

http://stackoverflow.com/questions/1509535/javascript-false-and-false/1509664#1509664 è una domanda apparentemente irrilevante, ma con una risposta pertinente a una cosa su cui * potresti * inciampare. –

risposta

156

{} è oggetto di notazione in JavaScript. Ad esempio:

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

In questo caso si passa un oggetto contenente le impostazioni al plug-in. Il plugin può affrontare questo come un oggetto, come diavolo si fa riferimento come, ad esempio:

settings.option1 //the option you passed in. 

Certo che ha molto più usi, ma questo è l'esempio più comune in jQuery. Lo stesso vale per le funzioni .animate(), $.ajax(), .css(), ecc. Tutto ciò che utilizza le proprietà generalmente utilizza questo formato.


come richiesto, alcuni altri esempi:
Qualsiasi oggetto all'interno dell'oggetto passato può essere una funzione così, non solo le proprietà, ad esempio:

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

Ciò impostare l'evento focus quell'input per avere un avviso. Un altro è l'estensione di un oggetto, l'aggiunta di oggetti da essa, in questo modo:

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

Ora person ha la proprietà last_name. Questo è spesso usato anche dai plugin, per prendere le impostazioni predefinite, quindi unire le impostazioni che hai passato, sovrascrivendo con le impostazioni che hai specificato, usando i default per il resto.

Perché lo stiamo utilizzando? Bene ... è così che JavaScript funziona, e nello spirito di jQuery: è un modo estremamente teso e flessibile per passare le informazioni.

+4

Direi che "perché" è che consente di passare facilmente un numero variabile di argomenti a una funzione. (Questo è il fraseggio che ha più senso per me.) –

+5

Risposta molto buona, ma se si aggiunge qualche esempio su altri usi, sarà molto molto buono. – uzay95

+0

@ uzay95 - Aggiunti altri esempi in cima alla mia testa, ci sono molti casi da usare là fuori. –

7

O è un JavaScript object literal o più specificamente JSON, quando si tratta di inviare i parametri su Ajax. JSON è un sottoinsieme di valori letterali oggetto JavaScript.

Ad esempio:

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

Si prega di leggere di più qui:

+1

+1 an ** empty ** json structure btw – OscarRyz

+6

Sarebbe più accurato dire che è un oggetto scritto con sintassi letterale dell'oggetto che "un JSON". –

+9

È un letterale dell'oggetto JavaScript. Non è JSON poiché non è conforme alla sintassi JSON (che è un ** sottoinsieme ** della sintassi letterale dell'oggetto JavaScript). – Quentin

4

Se si intende in questo contesto:

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

Poi il (function() {}) è una funzione anonima. Ma senza un esempio, non possiamo essere sicuri che sia ciò che intendi.

+0

Questo è come la funzione di delegato no? – uzay95

+2

simliar. una funzione anonima è essenzialmente una "funzione inline" che non si prevede di riutilizzare. È possibile utilizzare una funzione anonima ovunque sia previsto un delegato. Ecco perché funziona qui. la funzione clic si aspetta un delegato (è probabile che tu utilizzi una funzione delegato se prevedi di riutilizzare la funzione altrove o la funzione non è molto semplice) – Armstrongest

10

Voglio dire, cosa lo stiamo avvolgendo?

No. Questa è la notazione oggetto JavaScript (JSON). Nel tuo esempio si sta invocando la funzione ajaxSetup con un oggetto le cui proprietà sono:

error: fError, 
compelete: fComp, 
success: fSucc 

Per esempio, per creare un oggetto "utente" si potrebbe scrivere:

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

e quindi utilizzare una delle i suoi attributi:

alert(a.name); 

Spettacoli: Oscar

Cosa yo Vedete lì (nel vostro codice) è la creazione di un oggetto e passarlo come argomento.

Sarebbe equivalente a:

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

$.ajaxSetup(setUpInfo); 
+18

In realtà * non * JSON, che richiede la citazione dei nomi dei membri. È Javascript perfettamente valido, naturalmente. Inoltre, il tuo oggetto utente dovrebbe usare ':' invece di '=' – friedo

+0

- fixed = con: – OscarRyz

+2

È la notazione letterale dell'oggetto JavaScript ma non JSON. Come dice http://json.org - "JSON è basato su un sottoinsieme del linguaggio di programmazione JavaScript JSON è un formato di testo che è completamente indipendente dalla lingua ma utilizza convenzioni familiari ai programmatori della famiglia di linguaggi C, tra cui C, C++, C#, Java, JavaScript, Perl, Python e molti altri " –

6

La domanda riguardava la notazione "({})".

In questo contesto, le parentesi "(...)" che seguono un'espressione, ad esempio $ .ajaxSetup, provocano la chiamata della funzione specificata dall'espressione.

L'espressione tra parentesi (che potrebbe essere un elenco di espressioni separate da virgole) restituisce un valore (o un elenco di valori) che è l'argomento o gli argomenti passati alla funzione.

Infine, quando "{...}" viene utilizzato in un contesto di espressione, costruisce un oggetto con le proprietà del valore nome specificate. Questo è come JSON ma è, più in generale, qualsiasi oggetto letterale JS legale.