Написание библиотеки JavaScript - PullRequest
       6

Написание библиотеки JavaScript

8 голосов
/ 24 сентября 2011

Я хочу написать библиотеку JS и обработать ее следующим образом:

var c1 = Module.Class();
c1.init();
var c1 = Module.Class();
c2.init();

И, конечно, c1 и c2 не могут использовать одни и те же переменные.Я думаю, что знаю, как сделать это с объектами, это будет:

var Module = {

     Class = {

         init = function(){
             ...
         }

     }

}

Но проблема в том, что я не могу иметь несколько экземпляров Class, если я пишу таким образом.Так что я пытаюсь добиться того же с помощью функции, но я не думаю, что я делаю это правильно.

(function() {

    var Module;
    window.Module = Module = {};

    function Class( i ) {
        //How can "this" refer to Class instead of Module?
        this.initial = i;
    }

    Class.prototype.execute = function() {
        ...
    }

    //Public
    Module.Class = Class;

})();

У меня нет подсказки, если это вообще возможно, но я принимаю предложениядругого способа создать этот модуль.Я не знаю, имеет ли это отношение, но я использую jQuery внутри этой библиотеки.

1 Ответ

14 голосов
/ 24 сентября 2011

Использование:

var c1 = Module.Class("c");
var c2 = Module.Class("a");
var n = c1.initial(); // equals 'c'
c1.initial("s");
n = c1.initial(); // equals 's'

Код модуля:

(function(window) {
    var Module = window.Module = {};
    var Class = Module.Class = function(initial)
    {
        return new Module.Class.fn.init(initial);
    };
    Class.fn = Class.prototype = {
        init: function(initial) {
            this._initial = initial;
        },
        initial: function(v){
            if (v !== undefined) {
                this._initial = v;
                return this;
            }
            return this._initial;
        }
    };
    Class.fn.init.prototype = Class.fn;
})(window || this);

Используется шаблон проектирования JavaScript «Модуль»;это тот же шаблон проектирования, который используется библиотеками JavaScript, такими как jQuery.

Вот хорошее руководство по шаблону «Модуль»: Шаблон модуля JavaScript: In-Depth

...