11

从单实例和多实例的角度来看,我为什么要按照模块模式编写所有这些额外的代码行,而不是仅使用标准构造函数以及在构造函数主体中定义的方法和属性?

模块模式示例:http: //jsfiddle.net/T3ZJE/1/

var module = (function () {
    // private variables and functions
    var foo = 'bar';

    // constructor
    var module = function () {
    };

    // prototype
    module.prototype = {
        constructor: module,
        something: function () {
        }
    };

    // return module
    return module;
})();

var my_module = new module();

console.log(my_module)


构造函数示例:http: //jsfiddle.net/EuvaS/2/

function Module(){

    // private variables and functions
    var foo = 'bar';

    //public methods
    this.something = function () {

    }        
}

var my_module = new Module();

console.log(my_module);

对我来说,最终的结果几乎是一样的。两者都可以具有公共属性和方法,都可以具有可以被公共方法访问的“私有”变量和方法。

两者都将为单例定义一次公共/原型方法,都将为对象的多个实例/克隆定义多次。

我错过了什么吗?有什么不同?

4

2 回答 2

18

在第一个示例中, foo 将是 module() 的所有实例共有的静态变量。意思是,所有实例都将引用相同的变量。

在第二个示例中,每个 Module() 实例的 foo 都不同。

除此之外,我看不出有什么不同。

于 2012-11-28T18:48:13.620 回答
0

没什么特别的区别。但我不确定这个例子中模块模式的意义是什么。您不需要在模块中包含构造函数。构造函数应该像第二种样式一样使用。但是最好在其原型对象中定义方法,除非您需要为每个实例都拥有它。

再次就目的而言,我认为这里的模块模式不是正确的方法。

于 2012-11-28T19:03:28.180 回答