Javascript 为什么原型继承比闭包高效且占用内存更少?

Javascript 为什么原型继承比闭包高效且占用内存更少?,javascript,closures,prototypal-inheritance,Javascript,Closures,Prototypal Inheritance,我在网上搜索过,但无法理解这个问题的答案。对于同一个问题,许多人有不同的答案。我有点困惑 为什么喜欢原型继承而不是闭包,为什么它比闭包消耗更少的内存 我在下面写了两个例子,这样你就对我的问题有了基本的了解 var foo = function () { this.bar = function () { // do something }; }; 另一个是: var foo = function () { }; foo.prototype.bar = functi

我在网上搜索过,但无法理解这个问题的答案。对于同一个问题,许多人有不同的答案。我有点困惑

为什么喜欢原型继承而不是闭包,为什么它比闭包消耗更少的内存

我在下面写了两个例子,这样你就对我的问题有了基本的了解

var foo = function () {
    this.bar = function () {
        // do something
    };
};
另一个是:

var foo = function () { };
foo.prototype.bar = function () {
    // do something
};

具有关联函数和闭包的对象在某些方面是同构的,经典的CS教科书使用闭包实现面向对象的编程设计(它使用Scheme,但概念类似)

然而,在JavaScript中,对象被内置到语言中,并且它们的实现非常高效。原型是自动管理的——您可以通过链接原型来实现子类,JavaScript引擎会自动搜索原型链以找到合适的方法。仅仅使用闭包很难做到这一点,因为很难正确地获得所有变量作用域。使用原型时,特殊的
this
对象包含原始对象,这允许您获取其所有属性


具有原型的对象也更灵活,因为您可以将整个原型指定给新对象的原型。如果修改原型,它会影响引用它的所有其他对象。

使用原型方法的优点是速度快,内存使用率低


缺点是私有变量和函数不能在公共方法之间共享,因为无法创建公共闭包。

原型允许所有
foo
s共享相同的函数实例,和与
兼容。闭包呢?它们不是也不是。你能写一个简单的答案吗?@Ry-闭包也有相同的功能,它们只是有不同的环境,类似于原型继承中的对象。