这两个 JavaScript 代码有何不同?

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

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

foo1.init()
foo2.init()

我看到的区别如下:
  • 第一个是“闭包风格”,而第二个不是。
  • 第一个定义了一个工厂函数(*),它创建一个对象并将该工厂的结果绑定到foo1,而第二个则是一个普通的单例,除非你进行原型 hacking,否则你不能拥有更多实例。

还有其他区别吗?this绑定行为?意外的浏览器崩溃?哭泣的小猫?

(*) 换句话说,我可以做些什么:

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

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

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

1个回答

1

foo2 的一个限制是你不能真正拥有私有变量的概念。虽然这与你提到的闭包细节有关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接