Как разделить плагин jQuery по нескольким файлам

Ваш пример показывает "переменные экземпляра", не действительно переменные класса.

Взгляд в 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"

Переменные класса совместно используются всеми экземплярами класса.

8
задан John Schulze 17 June 2009 в 23:57
поделиться

1 ответ

Вы хотите добавить в «плагин» частную область действия / разделение проблем. Это может быть важно для обслуживания и долгосрочной расширяемости вашего веб-приложения на основе подключаемого модуля, независимо от того, все ли будет встроено в один файл или несколько файлов.

Вы можете создать частную область и расширить существующий метод 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.

6
ответ дан 5 December 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: