Ваш пример показывает "переменные экземпляра", не действительно переменные класса.
Взгляд в hi_obj.__class__.__dict__.items()
для переменных класса, вместе с другими другими участниками класса как функции членства и содержание модуля.
class Hi( object ):
class_var = ( 23, 'skidoo' ) # class variable
def __init__( self ):
self.ii = "foo" # instance variable
self.jj = "bar"
Переменные класса совместно используются всеми экземплярами класса.
Вы хотите добавить в «плагин» частную область действия / разделение проблем. Это может быть важно для обслуживания и долгосрочной расширяемости вашего веб-приложения на основе подключаемого модуля, независимо от того, все ли будет встроено в один файл или несколько файлов.
Вы можете создать частную область и расширить существующий метод 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 () из другой области. Я могу попытаться привести несколько примеров того, как это работает, но будет хорошей идеей, если вы проведете собственное исследование того, как разрешение прицела работает в таких сценариях.
Я считаю, что вы можете «позаимствовать» прицел у оригинальный "плагин" метод с использованием with ($ .fn.