2013-04-03 27 views
5

này ít jQuery plugin:jquery/javascript: jQuery.fn.reverse = [] .reverse;

jQuery.fn.reverse = [].reverse; 

Làm thế nào nó hoạt động? Đâu là đối tượng ràng buộc - Array nguyên mẫu để đảo ngược chức năng? Tôi thực sự không hiểu nó hoạt động như thế nào ở hậu trường. Một số giải thích sẽ được tốt đẹp. Chúc mừng

+1

Ban đầu, xuất phát từ [đây] (http://www.mail-archive.com/[email protected]/msg04261.html) và được gọi là tác giả , Michael Geary, là "plugin ngắn nhất thế giới". Rõ ràng các phương thức Mảng khác có thể được áp dụng theo cùng một cách: ví dụ: '.sort()', '.push()', '.pop()', '.unshift()' và '.shift()'. Có lẽ '.slice()' và '.splice()' cũng vậy. Tôi không chắc chắn '.join()' sẽ trả lại một kết quả hợp lý từ một đối tượng jQuery. –

Trả lời

5

jQuery.fn là bí danh cho jQuery.prototype.

Vì vậy, plugin này thêm chức năng reverse của Array cho tất cả các đối tượng được tạo với new JQuery(), đó là trường hợp cho các bộ sưu tập được tạo bằng $.

Và nó hoạt động vì chức năng của specification làm cho nó áp dụng cho bất kỳ đối tượng nào có độ dài và thuộc tính được lập chỉ mục. Bạn có thể thử nghiệm bằng cách sử dụng tính năng này:

var a = {0:'a', 1:'b'}; 
a.length = 2; 
console.log([].reverse.call(a)); // it works 
+0

Hành vi này là [theo thiết kế] (http://es5.github.com/#x15.4.4.8) và sẽ không thay đổi. – georg

+0

@everybody: Cảm ơn bạn đã giải thích. Có vẻ như đã hiểu nó rồi. –

13

[].reverse là hàm .reverse() từ Mảng mẫu thử nghiệm. jQuery đang tận dụng điều này thay vì xác định riêng của họ.

[] tạo một ô trống Array và hoàn toàn hợp lệ để tham chiếu hàm .reverse từ đó.

Vì vậy, bây giờ, trong jQuery, người ta có thể làm $.reverse() nếu đối tượng jQuery chứa một tập hợp các phần tử.

+2

Chính xác. Và nó hoạt động vì jQuery bắt chước cấu trúc của một mảng. +1! – jwueller

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