Вы хотите добавить в «плагин» частную сферу / разделение интересов. Это может быть важно для обслуживания и долгосрочной расширяемости вашего веб-приложения на основе плагинов, независимо от того, будет ли все встроено в один файл или несколько файлов.
Вы можете создать частную область видимости и расширить существующий метод jQuery.fn, подключив методы напрямую или добавив к прототипу метода 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);
Вы можете использовать jQuery.extend (), который в этом случае действительно является «сокращением» для добавления метода к экземпляру конструктора, как первый метод выше. Вы должны инкапсулировать все, что вы добавляете в объект (обычно это будет анонимный объект):
$.extend($.fn.myCMS,{ classOne: function () { } });
С точки зрения дизайна, если у вас есть "классы", которым нужно часто получать одинаковые закрытые переменные, они, вероятно, должны быть частью одной и той же области действия / замыкания функции, или вы должны предоставить методы получения и установки для этих закрытых переменных (возможно, с помощью соглашение _foo, которое показывает, что они предназначены для использования только вашим кодом).
(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);
Если вы хотите быть хакером и вам нужно получить закрытые переменные из другой области, я полагаю, что вы можете сделать это, выполнив эти новые методы с собственной областью, используя .call () или .apply () из другая сфера. Я могу попытаться привести некоторые примеры того, как это работает, но будет хорошей идеей, если вы проведете собственное исследование того, как работает разрешение области действия в подобных сценариях.
Я полагаю, что вы можете "позаимствовать" область видимости из исходного метода "plugin", используя конструкцию with ($ .fn.myCMS) {}, но я не уверен на 100% в этом, потому что я сам этого не делал , только читайте об этом.