2012-05-09 10 views
12

Tất cả các plugin jQuery cho Twitter Bootstrap theo cùng một mẫu cơ bản xác định một lớp điều khiển hành vi của plugin. Gần cuối, họ thực hiện việc này:

$.fn.alert.Constructor = Alert 

Điều này đang làm gì?

Tôi giả định rằng điều này đang xác định một hàm tạo mẫu thử nghiệm, nhưng chúng sử dụng chữ hoa C. Có trường hợp nào không quan trọng ở đây không? Ngoài ra, tôi không thực sự hiểu điều này đang làm và cách nó được plugin sử dụng.

Như một ví dụ, đây là plugin Alert: https://github.com/twitter/bootstrap/blob/master/js/bootstrap-alert.js

Trả lời

24

Không có ma thuật ở đây, Constructor (lớn C) như là một tài sản không có ý nghĩa đặc biệt. Đây chỉ là quy ước.

Về cơ bản họ đang sử dụng một lớp học như cấu trúc để xác định các chức năng

var Alert = function() {}; 
Alert.prototype.foo = function() {}; 

và phơi bày nó thông qua một tổ chức phi-class như giao diện.

$('#blurf').alert(); 

Vì vậy, đây chỉ đơn giản là một quy ước plugin hữu ích. Mỗi plugin jQuery định nghĩa chính phương thức chính trên đối tượng $.fn, có quyền truy cập vào các hàm tạo mà nó cần thông qua việc đóng. Nhưng bản thân nhà xây dựng là riêng tư với việc đóng cửa đó. Gán nó vào $.fn.myplugin.Constructor chỉ đơn giản là làm cho nhà xây dựng mà tiếp cận với mã khác, cho phép bạn có quyền kiểm soát tiên tiến nếu necesary

var myAlert = new $.fn.alert.Constructor('Hello World'); // or something 

Bây giờ bạn có thể một cái gì đó như thế này thay vì:

$.fn.alert.Alert = Alert; 

Đây là, chủ quan, xấu xí và dư thừa. Và bây giờ bạn sẽ phải dịch hoặc đoán tên thuộc tính dẫn đến hàm tạo. Nếu bạn nói mỗi plugin được triển khai với một lớp duy nhất và mỗi hàm tạo lớp có thể được tìm thấy tại $.fn.myplugin.Constructor thì bạn có giao diện nhất quán để truy cập các lớp đằng sau mỗi plugin.

Vì vậy, một lần nữa, đây chỉ là quy ước, không có gì quá đặc biệt về nó.