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

时间:2009-12-25 02:17:16

标签: javascript

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

var foo2 = {
    init: function() {
        alert(this+" hello foo2");
    }
};

foo1.init()
foo2.init()

我看到的差异是:

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

还有其他差异吗? this绑定行为?意外的浏览器爆炸?哭泣的小猫?

(*)换句话说,我可以做类似

的事情
var fooFactory = function () {
   return {
        init: function () {
            alert(this+" hello foo1");
        }
    };
}

var foo=fooFactory();
var bar=fooFactory();

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

1 个答案:

答案 0 :(得分:1)

foo2的一个限制是你不能真正拥有私有变量的概念。不过,这种情况与你提到的关闭细节一致。