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


¿Por qué estamos usando ({ })?

¿Es delegado?

¿Qué significa usar esta sintaxis?

¿Qué estamos envolviendo con eso?

Por ejemplo:

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

76
2018-04-07 18:00


origen


Respuestas:


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

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

En este caso, está pasando un objeto que contiene su configuración al complemento. El complemento puede tratar esto como un objeto, cualquiera que sea su referencia, por ejemplo:

settings.option1 //the option you passed in.

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


Como se solicitó, algunos otros ejemplos:
Cualquier objeto dentro del objeto pasado también puede ser una función, no solo propiedades, por ejemplo:

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

Esto establecería el evento de foco de esa entrada para tener una alerta. Otro es extender un objeto, agregarle propiedades, 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 el last_name propiedad. 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 estamos usando?  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.


156
2018-04-07 18:02



Quiero decir, ¿qué estamos envolviendo?

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

error: fError,
compelete: fComp,
success: fSucc

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

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

Y luego usa uno de sus atributos:

alert( a.name );

Espectáculos: Oscar

Lo que 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 );

10
2018-04-07 18:10



Es o bien un Literal de objeto de JavaScript o más específicamente JSON 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);

Por favor, lea más sobre esto aquí:


7
2018-04-07 18:02



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

En este contexto, los paréntesis "(...)" que siguen a una expresión, como $ .ajaxSetup, hacen que se llame a la función especificada por la expresión.

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, construye un objeto con las propiedades de nombre-valor especificadas. Esto es como JSON, pero es, de manera más general, cualquier objeto legal JS literal.


6
2018-04-07 21:19



Si te refieres 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.


4
2018-04-07 18:06