2012-04-27 35 views
5

Tôi đã xem qua một số mã từ một phần mở rộng firefox (ở đây: https://github.com/mozilla/prospector/blob/master/oneLiner/bootstrap.js#L34) và tôi thấy một cái gì đó tôi chưa bao giờ thấy trước đây trong javascript. Lập trình viên đã sử dụng một mảng kết hợp làm tên biến. Ai đó có thể giải thích cho tôi như thế nào biến này tham chiếu hoạt động?Sử dụng mảng kết hợp làm tên biến? - javascript

const {classes: Cc, interfaces: Ci, utils: Cu} = Components; 

tôi hiểu được "const" từ việc đọc trang này: https://developer.mozilla.org/en/JavaScript/Reference/Statements/const

nhưng làm thế nào là nó có thể sử dụng một đối tượng mảng kết hợp như một tên biến?

Ngoài ra, có vẻ như đang sử dụng tên khóa trong mảng kết hợp làm tham chiếu đến phương thức Thành phần (được liệt kê tại đây: https://developer.mozilla.org/en/Components_object). Tôi luôn nghĩ rằng một tên khóa phải đi trước và sau đó là giá trị, nhưng điều này dường như đặt giá trị của tham chiếu đến phương thức lớp Components trước và sau đó gán nó cho một tên của Cc mặc dù Cc ở vị trí mà một giá trị sẽ đi (và Ci cho phương thức giao diện thành phần & Cu cho phương thức thành phần utils).

+2

Trong JavaScript, thuật ngữ thông thường cho những gì bạn' ve được gọi là "mảng kết hợp" chỉ là "đối tượng" (hoặc đôi khi "bản đồ" hoặc "từ điển"). Chúng ta tránh nói "mảng kết hợp" vì nó gây nhầm lẫn cho những người ít thông tin hơn, những người nghĩ rằng nó liên quan đến loại 'Array'. –

+2

bản sao có thể có của [Khai báo liên tục với khối] (http://stackoverflow.com/questions/10199229/constant-declaration-with-block) –

Trả lời

6

gì bạn đang nhìn thấy là một nhiệm vụ Destructuring, nó có sẵn từ javascript 1,7 xem tài liệu này để biết thêm thông tin https://developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.7

phân Destructuring làm cho nó có thể trích xuất dữ liệu từ mảng hoặc đối tượng sử dụng một cú pháp mà gương việc xây dựng mảng và literals đối tượng. Biểu thức đối tượng và mảng chữ cung cấp một cách dễ dàng để tạo các gói dữ liệu đặc biệt. Khi bạn đã tạo các gói dữ liệu này, bạn có thể sử dụng chúng theo bất kỳ cách nào bạn muốn. Bạn thậm chí có thể trả lại chúng từ các chức năng.

+0

+1 lớn. Và rõ ràng, ECMAScript6 sẽ có * một số loại nhiệm vụ hủy diệt, mặc dù nó có thể không (hoặc có thể) hoàn toàn tương thích với Mozilla. –

+0

Cảm ơn bạn đã liên kết. Tôi đã tìm kiếm google trước khi tôi đăng nhưng không đưa ra bất cứ điều gì. Ví dụ này dường như giải thích rõ ràng: https://developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.7#Looping_across_values_in_an_array_of_objects Nó vẫn có vẻ lạ khi hoán đổi khóa: giá trị xung quanh. – Yansky

0

Yeah, kiểm tra này:

var abc = {classes: "ABC", interfaces: "DEF", utils: "XYZ"}; 
const {classes: Cc, interfaces: Ci, utils: Cu} = abc; 
console.debug("test: ", Cc, Ci, Cu); 

Hình như rất nhiều niềm vui, nhất là đối với một trong những người đang đọc mã :)

+0

Điểm tồi tệ nhất là nó chỉ tương thích với Firefox. Vì vậy, về cơ bản bạn buộc người đọc phải học (và giữ riêng) một ngôn ngữ khác. –

+0

Vâng, tôi đã thử [link] này (http://therelentlessfrontend.com/2010/10/02/how-to-get-the-javascript-version/) và nó nói với tôi rằng chrome của tôi cũng hỗ trợ 1,7, và firefox - 1.8, nhưng tuyên bố này không hoạt động trong chrome ... hơn nữa, IE9 chỉ hỗ trợ 1.3: D – Igor

Các vấn đề liên quan