代码之家  ›  专栏  ›  技术社区  ›  Stefano Borini

这两个javascript案例有什么区别?

  •  3
  • Stefano Borini  · 技术社区  · 16 年前
    var foo1 = function () {
       return {
            init: function () {
                alert(this+" hello foo1");
            }
        };
    }();
    
    var foo2 = {
        init: function() {
            alert(this+" hello foo2");
        }
    };
    
    foo1.init()
    foo2.init()
    

    我看到的区别是:

    • 第一种是“封闭式”,而第二种不是。
    • 第一个定义了一个工厂函数(*),它创建一个对象并将该工厂的结果绑定到 foo1 第二个是一个普通的单例,除非你这样做,否则你不能有更多的实例。

    还有什么区别吗? this 约束行为?意外的浏览器引爆?哭着的小猫?

    换句话说,我可以做一些像

    var fooFactory = function () {
       return {
            init: function () {
                alert(this+" hello foo1");
            }
        };
    }
    
    var foo=fooFactory();
    var bar=fooFactory();
    

    foo bar 现在是同一“类”的两个不同实例(实际上,它们只是“发生”(通过构造)具有相同接口的两个对象)。

    1 回复  |  直到 16 年前
        1
  •  1
  •   mrvisser    16 年前

    对foo2的一个限制是不能真正拥有私有变量的概念。不过,这与您提到的结束细节是一致的。