我已经搜索了互联网,但无法理解该问题的答案。许多人对同一问题有不同的答案。我有点困惑。
为什么比闭包更喜欢原型继承,为什么它比闭包消耗更少的内存?
我在下面写下了两个示例,以便您基本了解我的要求。
var foo = function () {
this.bar = function () {
// do something
};
};
另一个是:
var foo = function () { };
foo.prototype.bar = function () {
// do something
};
答案 0 :(得分:0)
具有关联函数和闭包的对象在某些方面是同构的。 Structure and Interpretation of Computer Programs是一本经典的CS教科书,它使用闭包来实现面向对象的编程设计(它使用Scheme,但是概念相似)。
但是,在JavaScript中,对象内置在语言中,并且可以非常有效地实现它们。原型是自动管理的-您可以通过链接原型来实现子类,JavaScript引擎会自动搜索原型链以找到合适的方法。仅使用闭包很难做到这一点,因为正确设置所有变量作用域很困难。使用原型时,特殊的this
对象包含原始对象,这使您可以获取其所有属性。
带有原型的对象也更加灵活,因为您可以将整个原型分配给新对象的原型。如果然后修改原型,它将影响引用它的所有其他对象。
答案 1 :(得分:0)
使用原型方法的优点是速度快和内存使用率低。
缺点是私有变量和函数不能在公共方法之间共享,因为无法创建公共闭包。