Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这两个javascript案例之间有什么区别?_Javascript - Fatal编程技术网

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

这两个javascript案例之间有什么区别?,javascript,Javascript,我看到的区别是: 第一种是“闭包式”,而第二种不是 第一个定义了一个工厂函数(*),该函数创建一个对象并将该工厂的结果绑定到foo1,第二个则是一个普通的单例,除非您这样做,否则您不能拥有更多的实例。原型黑客攻击 还有其他区别吗此绑定行为?意外的浏览器爆炸?哭泣的小猫 (*)换句话说,我可以这样做 var foo1 = function () { return { init: function () { alert(this+" hello fo

我看到的区别是:

  • 第一种是“闭包式”,而第二种不是
  • 第一个定义了一个工厂函数(*),该函数创建一个对象并将该工厂的结果绑定到
    foo1
    ,第二个则是一个普通的单例,除非您这样做,否则您不能拥有更多的实例。原型黑客攻击
还有其他区别吗<代码>此绑定行为?意外的浏览器爆炸?哭泣的小猫

(*)换句话说,我可以这样做

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

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

foo1.init()
foo2.init()

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

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

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

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