编写一个JavaScript库

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。

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的“模块”设计模式,这也是JavaScript库(如jQuery)所使用的相同设计模式。

以下是关于“模块”模式的一篇好教程: JavaScript Module Pattern: In-Depth


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接