这两个单例模式之间有什么区别?

时间:2019-06-24 19:25:45

标签: javascript singleton

这两种实现都创建一个单例,但是一个使用this关键字,而另一个则返回对象文字。一种做法比另一种更好吗?

var Class = new function() {
    var privateVar = 3;
    this.publicMethod = function() {
        return privateVar;
    }
};
Class.publicMethod() //Returns 3

vs。

var Class = (function() {
    var privateVar = 3;
    return {
        publicMethod: function() {
            return privateVar;
        }
    }
})();
Class.publicMethod() //Returns 3

1 个答案:

答案 0 :(得分:-1)

我认为它们是等效的。

new <function>创建一个新对象,将其__proto__属性设置为<function>的原型,以该对象作为其<function>上下文调用this,然后如果函数没有返回其他对象,则返回该对象。匿名函数的原型是Object原型。

您的IIFE版本是等效的,因为它创建并返回了对象本身。从文字创建的对象的原型也是Object原型。