【问题标题】:Why are we using "({ })" in jQuery?为什么我们在 jQuery 中使用“({ })”?
【发布时间】:2011-02-05 09:19:11
【问题描述】:

我们为什么使用({ })

是委托人吗?

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

我们用它包装什么?

例如:

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

【问题讨论】:

标签: javascript jquery json


【解决方案1】:

当涉及到通过 Ajax 发送参数时,它要么是 JavaScript object literal,要么更具体地说是 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);

请在此处阅读更多信息:

【讨论】:

  • 说它是一个用对象字面量语法写成的对象比“a JSON”更准确。
  • 它是一个 JavaScript 对象字面量。它不是 JSON,因为它不符合 JSON 语法(它是 JavaScript 对象文字语法的 子集)。
【解决方案2】:

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

【讨论】:

  • 我会说“为什么”它允许您轻松地将可变数量的参数传递给函数。 (这是对我来说最有意义的措辞。)
  • 非常好的答案,但是如果你添加一些关于其他用法的例子,它会非常非常好。
  • @uzay95 - 在我的脑海中添加了更多示例,有很多案例可供使用。
  • 非常非常非常好的答案...我学到了很多东西。非常感谢。
  • 带有 focusin 的示例不起作用,或者我无法使其起作用?
【解决方案3】:

如果你的意思是在这种情况下:

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

那么( function() {}) 是一个匿名函数。但是没有示例,无法确定您的意思。

【讨论】:

  • 这就像委托函数不是吗?
  • 类似。匿名函数本质上是您不打算重用的“内联函数”。您可以在需要委托的任何地方使用匿名函数。这就是它在这里工作的原因。 click 函数需要一个委托(如果您打算在其他地方重用该函数或者该函数不是很简单,您可能会使用委托函数)
【解决方案4】:

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

没有。那是 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 );

【讨论】:

  • 其实是不是 JSON,需要引用成员名。当然,它是完全有效的 Javascript。此外,您的用户对象应该使用: 而不是=
  • 这是 JavaScript 对象文字表示法,但不是 JSON。正如json.org 所说——“JSON 基于 JavaScript 编程语言的一个子集。JSON 是一种完全独立于语言的文本格式,但使用 C 系列语言的程序员熟悉的约定,包括 C、C++、 C#、Java、JavaScript、Perl、Python 等等”
【解决方案5】:

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

在此上下文中,表达式后面的括号“(...)”(例如 $.ajaxSetup)会导致调用表达式指定的函数。

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

最后,当在表达式上下文中使用“{...}”时,它会构造一个具有指定名称-值属性的对象。这类似于 JSON,但更一般地说,它是任何合法的 JS 对象字面量。

【讨论】:

    猜你喜欢
    • 2014-06-20
    • 2017-05-03
    • 2013-10-20
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 2022-12-26
    相关资源
    最近更新 更多