为什么原型继承有效,并且比闭包消耗更少的内存?

时间:2018-08-09 06:42:15

标签: javascript closures prototypal-inheritance

我已经搜索了互联网,但无法理解该问题的答案。许多人对同一问题有不同的答案。我有点困惑。

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

我在下面写下了两个示例,以便您基本了解我的要求。

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

另一个是:

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

2 个答案:

答案 0 :(得分:0)

具有关联函数和闭包的对象在某些方面是同构的。 Structure and Interpretation of Computer Programs是一本经典的CS教科书,它使用闭包来实现面向对象的编程设计(它使用Scheme,但是概念相似)。

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

带有原型的对象也更加灵活,因为您可以将整个原型分配给新对象的原型。如果然后修改原型,它将影响引用它的所有其他对象。

答案 1 :(得分:0)

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

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