为什么我们在jQuery中使用“({})”?


77

我们为什么使用({ })

是代表吗?

使用这种语法是什么意思?

我们用它包装什么?

例如:

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

1
stackoverflow.com/questions/1509535/javascript-false-and-false / ...是一个看似无关的问题,但是对于您可能要绊倒的一件事提供了相关的答案。
月牙食

Answers:


158

{}是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的精神:这是一种极为简洁灵活的信息传递方式。


4
我会说“为什么”是它使您可以轻松地将可变数量的参数传递给函数。(这对我来说最有意义。)
Annika Backstrom

5
很好的答案,但是如果添加一些有关其他用法的示例,那将非常好。
uzay95

@ uzay95-在我的头顶上又添加了一些示例,那里有很多用例。
尼克·克拉弗

1
非常非常非常好的答案...我学到了很多东西。非常感谢。
uzay95

focusin的示例不起作用,或者我无法使其起作用?
Sotiris

10

我的意思是,我们要包装什么?

否。这是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 );

18
它实际上不是JSON,它要求引用成员名称。当然,它是完全有效的Javascript。此外,您的用户对象应使用:代替=
Friedo

2
它是JavaScript对象文字表示法,而不是JSON。正如json.org所说-“ JSON基于JavaScript编程语言的子集。JSON是一种完全独立于语言的文本格式,但是使用C语言家族(包括C,C ++, C#,Java,JavaScript,Perl,Python等等”
Russ Cam

7

通过Ajax发送参数时,它可以是JavaScript对象文字,或更确切地说是JSON。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
可以说它是使用对象文字语法编写的对象,而不是“ JSON”。
Jimmy Cuadra 2010年

9
这是一个JavaScript对象文字。它不是JSON,因为它不符合JSON语法(这是JavaScript对象文字语法的子集)。
昆汀

6

问题是关于符号“({{})”。

在这种情况下,表达式(例如$ .ajaxSetup)后的括号“(...)”将导致调用该表达式指定的函数。

括号内的表达式(可能是逗号分隔的表达式列表)会产生一个值(或值列表),该值是传递给该函数的参数。

最后,在表达式上下文中使用“ {...}”时,它将使用指定的名称-值属性构造一个对象。这就像JSON,但更一般而言,它是任何合法的JS对象文字。


4

如果您在这种情况下是指:

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

然后,( function() {})是一个匿名函数。但是没有一个例子,就不能确定这就是你的意思。


这就像委托函数,不是吗?
uzay95

2
类似。匿名函数本质上是您不打算重用的“内联函数”。您可以在任何需要委托的地方使用匿名函数。这就是为什么它在这里起作用。click函数需要一个委托(如果您打算在其他地方重用该函数或者该函数不是很简单,则可能会使用委托函数)
Armstrongest 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.