Bạn muốn thêm vào "cắm" với một phạm vi private/tách quan tâm. Điều này có thể quan trọng để bảo trì và khả năng mở rộng lâu dài của ứng dụng web dựa trên plugin của bạn, bất kể mọi thứ sẽ được tích hợp vào một tệp hay nhiều tệp.
Bạn có thể tạo một phạm vi riêng tư và mở rộng một phương pháp jQuery.fn hiện bằng cách gắn các phương pháp trực tiếp hoặc bằng cách thêm vào nguyên mẫu của phương pháp jQuery.fn.foo
(function ($) {
// instance method attached to the constructor function
$.fn.myCMS.classOne = function() {
};
// or "shared" method attached to prototype
$.fn.myCMS.prototype.classOne = function() {
};
})(jQuery);
Bạn có thể sử dụng jQuery.extend(), mà trong trường hợp này thực sự là một "viết tắt" để thêm phương thức vào thể hiện của hàm tạo như là phương thức đầu tiên ở trên. Bạn phải đóng gói bất cứ điều gì bạn đang thêm vào một đối tượng (thường đây sẽ là một đối tượng ẩn danh):
$.extend($.fn.myCMS,{ classOne: function() { } });
Từ góc độ thiết kế nếu bạn có "lớp học" mà cần phải nhận được tại các biến closured cùng thường họ có lẽ nên là một phần của cùng một phạm vi chức năng/đóng cửa, hoặc bạn nên để lộ getters và setters cho những biến đóng (có lẽ với quy ước _foo cho thấy chúng được dự định chỉ được sử dụng bởi mã của bạn).
(function ($) {
var foo = "foo!";
// combined getter/setter
// could also check arguments.length
$.fn.myCMS._foo = function (value) {
if (typeof(value) != "undefined") {
foo = value;
} else {
return foo;
}
};
)(jQuery);
Nếu bạn muốn trở thành một hacker và bạn cần phải nhận được ít biến closured từ một phạm vi khác nhau, tôi tin rằng bạn có thể làm như vậy bằng cách thực hiện những phương pháp mới với phạm vi riêng của họ sử dụng .call() hoặc .apply() từ phạm vi khác. Tôi có thể cố gắng roi lên một số mẫu về cách thức hoạt động của nó, nhưng sẽ là một ý kiến hay nếu bạn tự nghiên cứu về cách giải quyết phạm vi hoạt động trong các loại kịch bản này.
Tôi tin rằng bạn có thể "mượn" phạm vi từ phương thức "plugin" gốc bằng cách sử dụng cấu trúc có ($ .fn.myCMS) {} nhưng tôi không hoàn toàn 100% về điều đó vì tôi chưa thực hiện bản thân mình, chỉ đọc về nó.
Nguồn
2009-12-12 14:16:30