3

我想将 Snippet 1 重构为 Snippet 2。考虑到大小,我认为这里的性能不是一个很大的问题,但我想了解内存使用情况与此重构模块模式有关。

模块模式确保我只从 DOM 中提取我想要的数据一次,并且它还形成了一个迷你注册表模式,因为数据是私有的。

这两个片段都已经过测试并且基本上可以工作。

片段 1 // 用 SU 替换 SUUniverisals

var SUniversals = function () {
    // Pull from Server
    this.universals.path = document.getElementById('universals').getAttribute('data-path');
    this.universals.load = document.getElementById('universals').getAttribute('data-load');
    // Set Manually
    this.universals.debug = false;
};
SUniversals.prototype.universals = {};
SUniversals.prototype.get = function( key ) {
    return this.universals[ key ];
};
SUniversals.prototype.set = function( key, value ) {
    this.universals[ key ] = value;
};

片段 2

var SU = ( function () 
{
    // private SU.get('load');
    var universals = {};
        universals.path = document.getElementById('universals').getAttribute('data-path');
        universals.load = document.getElementById('universals').getAttribute('data-load');
        universals.debug = false;
    // pubulic
    var publik = {};
        publik.get = function( key )
        {
            return universals[ key ];
        };
        publik.set = function( key, value )
        {
            universals[ key ] = value;
        };
        return publik;
}());
4

2 回答 2

2

有一些不同的东西。Snippet 2 本质上是创建一个单例。Snippet 1 可以看作是一个“类”。您可以创建“SUniversals”的多个实例/对象并用它们做不同的事情。

实际上,片段 1 在内存方面更有效。通过添加到对象的原型,无论您创建的对象数量如何,基本上每个函数都只有 1 个副本。模块模式将创建单独的实体。

于 2012-07-10T22:01:01.307 回答
1

还不够担心;-)

说真的,使用模块模式你唯一需要担心的就是造成内存泄漏。该模式本身基本上不使用任何东西。

于 2012-07-10T21:54:38.070 回答