模块模式与匿名构造函数的实例

25 javascript singleton

所以这就是所谓的模块模式,用于创建私有成员的单身人士:

var foo = (function () {
    var _foo = 'private!';
    return {
        foo: function () { console.log(_foo); },
        bar: 'public!'
    }
})();
Run Code Online (Sandbox Code Playgroud)

还有我自己发现的这种方法,但没有看到任何关于:

var foo = new function () {
    var _foo = 'private!';
    this.bar = 'public!';
    this.foo = function () { console.log(_foo); };
}
Run Code Online (Sandbox Code Playgroud)

我认为必须有一个理由为什么没有人写这篇文章,而有大量关于模块模式的文章.这种模式有什么缺点吗?或许速度或浏览器兼容性?

Mar*_*nze 12

在这种情况下,您似乎只使用该"类"的一个实例对象.因此,可能要采取看看道格拉斯Crockford的想着直接在眼前:newfunction

通过使用new来调用函数,该对象保持一个无用的prototype对象.这浪费了记忆,没有抵消优势.如果我们不使用new,我们不会将浪费的原型对象保留在链中.因此,我们将使用()以正确的方式调用工厂函数.

所以根据着名的雅虎javascript架构师!你应该使用第一种方法,你有他的理由.

  • 你解释我的答案不是我的意思,也不是我所说的.我只回答了关于构造对象的两种具体方法的问题,当你只有一个实例时(如问题所示).而克罗克福德的帖子背景则完全相同.但是我已经把你的反馈意见作为你的建设性部分了**我已经更新了我的问题**以包含上下文.谢谢你评论你的-1. (3认同)

Ant*_*nes 1

我认为两者之间没有任何实质性差异。我更喜欢后者,因为它的标点符号混乱得多。

另一方面,“模块模式”方法似乎是最常见的,并且正在成为一种众所周知的模式(由于 JQuery 的兴起)。坚持这种公认的模式可能会更好,不是因为它比其他方法有更多的技术优点,而是因为它可能更容易识别(尽管标点符号很重)。