8

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を使用しています。

4

1 に答える 1

14

使用法:

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の「モジュール」デザインパターンを使用しています。これは、jQueryなどのJavaScriptライブラリで使用されているものと同じデザインパターンです。

これが「モジュール」パターンに関する素晴らしいチュートリアルです: JavaScriptモジュールパターン:詳細

于 2011-09-24T18:48:49.117 に答える