编写一个javascript库

时间:2011-09-24 18:39:16

标签: object javascript module-pattern

我想写一个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 个答案:

答案 0 :(得分: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“模块”设计模式;这与JavaScript库(如jQuery)使用的设计模式相同。

这是关于“模块”模式的一个很好的教程: JavaScript Module Pattern: In-Depth