Câu hỏi Tại sao chúng ta sử dụng “({})” trong jQuery?


Tại sao chúng ta sử dụng ({ })?

Là nó đại biểu?

Sử dụng cú pháp này có nghĩa là gì?

Chúng ta đang gói gì với nó?

Ví dụ:

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

76
2018-04-07 18:00


gốc


stackoverflow.com/questions/1509535/javascript-false-and-false/… là một câu hỏi dường như không liên quan, nhưng với câu trả lời phù hợp với một điều bạn có thể bị vấp ngã. - Crescent Fresh


Các câu trả lời:


{} là ký pháp đối tượng trong JavaScript. Ví dụ:

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

Trong trường hợp này, bạn đang truyền một đối tượng chứa các cài đặt của bạn cho plugin. Plugin có thể xử lý điều này như một đối tượng, bất kể nó được tham chiếu như thế nào, ví dụ:

settings.option1 //the option you passed in.

Tất nhiên nó có nhiều công dụng hơn, nhưng đây là ví dụ phổ biến nhất trong jQuery. Điều này cũng đúng cho .animate(), $.ajax(), .css() chức năng, vv Bất cứ điều gì mà có tài sản thường sử dụng định dạng này.


Theo yêu cầu, một số ví dụ khác:
Bất kỳ đối tượng nào bên trong đối tượng được truyền cũng có thể là một hàm, không chỉ các thuộc tính, ví dụ:

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

Điều này sẽ đặt sự kiện trọng tâm của đầu vào đó để có cảnh báo. Một cách khác là mở rộng một đối tượng, thêm các thuộc tính vào nó, như sau:

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

Hiện nay person có last_name bất động sản. Điều này thường được sử dụng bởi các plugin, để thực hiện cài đặt mặc định, sau đó hợp nhất bất kỳ cài đặt nào bạn đã nhập, ghi đè bằng bất kỳ cài đặt nào bạn chỉ định, sử dụng mặc định cho phần còn lại.

Tại sao chúng ta sử dụng nó?  Vâng ... đó là cách JavaScript hoạt động, và trong tinh thần jQuery: đó là một cách cực kỳ linh hoạt và linh hoạt để truyền thông tin.


156
2018-04-07 18:02



Tôi muốn nói "tại sao" là nó cho phép bạn dễ dàng vượt qua một số biến đối số cho một hàm. (Đó là cách nói có ý nghĩa nhất đối với tôi.) - Annika Backstrom
Câu trả lời rất hay, nhưng nếu bạn thêm một số ví dụ về cách sử dụng khác, nó sẽ rất tốt. - uzay95
@ uzay95 - Thêm một vài ví dụ khác trên đầu của tôi, có rất nhiều trường hợp để sử dụng ra khỏi đó. - Nick Craver♦
Câu trả lời rất rất tốt ... Tôi đã học được rất nhiều điều. Cảm ơn bạn rất nhiều. - uzay95
Ngoài ra hãy xem json.org/js.html cho cú pháp tương tự - RobertPitt


Ý tôi là, những gì chúng tôi đang gói nó?

Không. Đó là ký hiệu đối tượng JavaScript (JSON). Trong ví dụ của bạn, bạn đang gọi hàm ajaxSetup với một đối tượng có thuộc tính là:

error: fError,
compelete: fComp,
success: fSucc

Ví dụ: để tạo đối tượng "người dùng" bạn có thể viết:

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

Và sau đó sử dụng một trong các thuộc tính của nó:

alert( a.name );

Chương trình: Oscar

Những gì bạn thấy ở đó (trong mã của bạn) là việc tạo ra một đối tượng và truyền nó như một đối số.

Nó sẽ tương đương với:

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

$.ajaxSetup( setUpInfo );

10
2018-04-07 18:10



Nó thực sự không phải JSON, yêu cầu tên thành viên được trích dẫn. Đó là Javascript hoàn toàn hợp lệ, tất nhiên. Ngoài ra, đối tượng người dùng của bạn nên sử dụng : thay vì = - friedo
- cố định = với: - OscarRyz
Đó là ký hiệu chữ của đối tượng JavaScript nhưng không phải JSON. Như json.org JSON là một định dạng văn bản hoàn toàn độc lập với ngôn ngữ nhưng sử dụng các quy ước quen thuộc với các lập trình viên của ngôn ngữ lập trình C, bao gồm C, C ++, C #, Java, JavaScript, Perl, Python và nhiều thứ khác " - Russ Cam


Nó là một trong hai Đối tượng JavaScript theo nghĩa đen hoặc cụ thể hơn JSON khi nói đến việc gửi các tham số qua Ajax. JSON là tập con của các đối tượng JavaScript.

Ví dụ:

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

Vui lòng đọc thêm tại đây:


7
2018-04-07 18:02



+1 một trống json cấu trúc btw - OscarRyz
Sẽ chính xác hơn khi nói rằng đó là một đối tượng được viết với cú pháp ngữ pháp đối tượng hơn là "một JSON". - Jimmy Cuadra
Nó là một đối tượng JavaScript theo nghĩa đen. Nó không phải là JSON vì nó không tuân theo cú pháp JSON (mà là một tập hợp con cú pháp ngữ pháp đối tượng JavaScript). - Quentin


Câu hỏi là về ký hiệu "({})".

Trong bối cảnh này, dấu ngoặc đơn "(...)" theo một biểu thức, chẳng hạn như $ .ajaxSetup, làm cho hàm được chỉ định bởi biểu thức được gọi.

Biểu thức bên trong dấu ngoặc đơn (có thể là một danh sách các biểu thức được phân tách bằng dấu phẩy) kết quả trong một giá trị (hoặc một danh sách các giá trị) là (các) đối số được truyền cho hàm.

Cuối cùng, khi "{...}" được sử dụng trong ngữ cảnh biểu thức, nó xây dựng một đối tượng với các thuộc tính tên-giá trị được chỉ định. Điều này giống như JSON nhưng nói chung, bất kỳ đối tượng JS pháp lý nào cũng có nghĩa đen.


6
2018-04-07 21:19





Nếu bạn ngụ ý trong ngữ cảnh này:

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

Sau đó, ( function() {}) là một hàm ẩn danh. Nhưng không có một ví dụ, không thể chắc chắn đó là những gì bạn có ý nghĩa.


4
2018-04-07 18:06



Điều này giống như chức năng đại biểu phải không? - uzay95
simliar. một hàm ẩn danh về bản chất là một "hàm nội tuyến" mà bạn không có kế hoạch sử dụng lại. Bạn có thể sử dụng một chức năng ẩn danh bất cứ nơi nào một đại biểu được mong đợi. Đó là lý do tại sao nó hoạt động ở đây. hàm nhấp chuột mong đợi một đại biểu (bạn có thể sẽ sử dụng một hàm đại biểu nếu bạn định sử dụng lại hàm ở nơi khác hoặc hàm không thực sự đơn giản) - Armstrongest