jQuery.sub()
Есть два конкретных случая использования, для которых jQuery.sub() был создан. Первый предоставляет безболезненный способ переопределения методов jQuery без полного уничтожения оригинальных методов, а другой помогает сделать инкапсуляцию и основные пространства имен для плагинов jQuery.
Обратите внимание, что jQuery.sub() не пытается сделать какую-либо разновидность изоляции - это не о его намерение. Все методы версий sub jQuery будут указывать на оригинальный jQuery (события будут связаны и вызваны через главный jQuery, данные будет связаны с элементами через главный jQuery, Ajax запросы и события будут проходить через основные jQuery, и т.д.).
Заметим, что если Вы хотите использовать этот плагин для разработок сначала вы должны серьезно рассмотреть использование чего-то вроде виджетов пользовательского интерфейса jQuery, которые управляют как состоянием, так и плагинами под-методов. Некоторые примеры использования виджетов пользовательского интерфейса jQuery для строительства плагинов.
Частные случаи использования этого метода можно лучше всего описать через несколько примеров.
Примеры
Пример 1
Добавляет метод к jQuery sub так, что она не доступна снаружи:
(function(){
var sub$ = jQuery.sub();
sub$.fn.myCustomMethod = function(){
return 'just for me';
};
sub$(document).ready(function() {
sub$('body').myCustomMethod() // 'just for me'
});
})();
typeof jQuery('body').myCustomMethod // undefined
Пример 2
Переопределяет некоторые методы jQuery, чтобы обеспечить новые функции:
(function() {
var myjQuery = jQuery.sub();
myjQuery.fn.remove = function() {
// New functionality: Trigger a remove event
this.trigger("remove");
// Be sure to call the original jQuery remove method
return jQuery.fn.remove.apply( this, arguments );
};
myjQuery(function($) {
$(".menu").click(function() {
$(this).find(".submenu").remove();
});
// A new remove event is now triggered from this copy of jQuery
$(document).bind("remove", function(e) {
$(e.target).parent().hide();
});
});
})();
// Regular jQuery doesn't trigger a remove event when removing an element
// This functionality is only contained within the modified 'myjQuery'.
Пример 3
Создает плагин, который возвращает плагин конкретных методов:
(function() {
// Create a new copy of jQuery using sub()
var plugin = jQuery.sub();
// Extend that copy with the new plugin methods
plugin.fn.extend({
open: function() {
return this.show();
},
close: function() {
return this.hide();
}
});
// Add our plugin to the original jQuery
jQuery.fn.myplugin = function() {
this.addClass("plugin");
// Make sure our plugin returns our special plugin version of jQuery
return plugin( this );
};
})();
$(document).ready(function() {
// Call the plugin, open method now exists
$('#main').myplugin().open();
// Note: Calling just $("#main").open() won't work as open doesn't exist!
});

