2010-04-07 10 views
76

¿Por qué estamos usando ({ })?¿Por qué usamos "({})" en jQuery?

¿Es delegado?

¿Qué significa usar esta sintaxis?

¿Qué estamos envolviendo con esto?

Por ejemplo:

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

http://stackoverflow.com/questions/1509535/javascript-false-and-false/1509664#1509664 es una pregunta aparentemente irrelevante, pero con una respuesta apropiada a una cosa que * puede * ser tropezar con uno. –

Respuesta

156

{} es notación de objetos en JavaScript. Por ejemplo:

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

En este caso estás pasando un objeto que contiene la configuración para el plugin. El plugin puede hacer frente a esto como un objeto, como quiera que se hace referencia como, por ejemplo:

settings.option1 //the option you passed in. 

Por supuesto que tiene mucho más usos, pero este es el ejemplo más común en jQuery. Lo mismo es cierto para las funciones .animate(), $.ajax(), .css(), etc. Cualquier cosa que tome propiedades generalmente usa este formato.


lo solicitado, algunos otros ejemplos:
Cualquier objeto en el interior del objeto pasado pueden ser una función, así, no sólo propiedades, por ejemplo:

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

Esto establecer el evento de foco de esa entrada para tener una alerta. Otro está extendiendo un objeto, la adición de propiedades a ella, como este:

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

Ahora person tiene la propiedad last_name. Esto también lo usan a menudo los complementos, para tomar las configuraciones predeterminadas, luego fusiona cualquier configuración que haya pasado, sobrescribiendo con cualquier configuración que haya especificado, usando valores predeterminados para el resto.

¿Por qué lo utilizamos? Bueno ... así es como funciona JavaScript, y en el espíritu de jQuery: es una forma extremadamente rápida y flexible de pasar información.

+4

Diría que el "por qué" le permite pasar fácilmente una cantidad variable de argumentos a una función. (Esa es la expresión que tiene más sentido para mí.) –

+5

muy buena respuesta, pero si se añade algún ejemplo sobre otros usos, será muy muy bueno. – uzay95

+0

@ uzay95 - Agregué algunos ejemplos más de la parte superior de mi cabeza, hay muchos casos para usar allí. –

7

Es bien un JavaScript object literal JSON o más específicamente cuando se trata de enviar parámetros sobre Ajax. JSON es un subconjunto de literales de objetos JavaScript.

Por ejemplo:

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

Lea más sobre él aquí:

+1

1 una estructura JSON ** ** vacía por cierto – OscarRyz

+6

Sería más exacto decir que es un objeto escrito con objeto de sintaxis literal que "un JSON." –

+9

Es un objeto de JavaScript literal. No es JSON ya que no se ajusta a la sintaxis JSON (que es un ** subconjunto ** de la sintaxis literal del objeto de JavaScript). – Quentin

4

Si usted quiere decir en este contexto:

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

Entonces el (function() {}) es una función anónima. Pero sin un ejemplo, no puede estar seguro de que eso es lo que quiere decir.

+0

Esto es como la función de delegado ¿no? – uzay95

+2

simliar. una función anónima es esencialmente una "función en línea" que no planea volver a utilizar. Puede usar una función anónima en cualquier lugar donde se espere un delegado. Es por eso que funciona aquí. la función de clic espera un delegado (es probable que use una función de delegado si planea reutilizar la función en otro lugar o la función no es realmente simple) – Armstrongest

10

Me refiero a lo que estamos envolviendo?

No. Esa es la notación de objeto JavaScript (JSON). En el ejemplo que está invocando la función ajaxSetup con un objeto cuyas propiedades son:

error: fError, 
compelete: fComp, 
success: fSucc 

Por ejemplo, para crear un objeto "usuario" se podría escribir:

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

Y a continuación, utilizar una de sus atributos:

alert(a.name); 

espectáculos: Oscar

Lo que yo ves allí (en tu código) es la creación de un objeto y pasarlo como un argumento.

Sería equivalente a:

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

$.ajaxSetup(setUpInfo); 
+18

En realidad * no * JSON, que requiere que se citen los nombres de los miembros. Es perfectamente válido Javascript, por supuesto. Además, su objeto de usuario debería usar ':' en lugar de '=' – friedo

+0

- fixed = with: – OscarRyz

+2

Es la notación literal del objeto JavaScript pero no JSON. Como dice http://json.org: "JSON se basa en un subconjunto del lenguaje de programación JavaScript. JSON es un formato de texto que es completamente independiente del lenguaje pero utiliza convenciones que son familiares para los programadores de la familia C de idiomas, incluidos C, C++, C#, Java, JavaScript, Perl, Python y muchos otros " –

6

La pregunta fue sobre la notación "({})".

En este contexto, los paréntesis "(...)" después de una expresión, tales como $ .ajaxSetup, hace que la función especificada por la expresión que se llamará.

La expresión entre paréntesis (que podría ser una lista de expresiones separadas por comas) da como resultado un valor (o una lista de valores) que son los argumentos pasados ​​a la función.

Finalmente, cuando "{...}" se usa en un contexto de expresión, se construye un objeto con las propiedades de nombre y valor especificados. Esto es como JSON, pero es, de manera más general, cualquier objeto legal JS literal.

Cuestiones relacionadas