首先让我举两个例子。
示例1:
function Gallery() {
this.a = "I am 'A'";
this.trace = function() {
console.log(this.a);
}
}
示例2:
function Gallery() {
this.a = "I am 'A'";
}
Gallery.prototype.trace = function () {
console.log(this.a);
}
显然,两者的作用是相同的。我的问题是:与原型(prototype)函数相比,在构造函数中使用方法定义有什么缺点吗?到底有什么区别?
原型(prototype)对内存更友好吗?我假设,如果我在构造函数内定义该方法,则每个 Gallery 实例都将拥有该方法的“自己的实例”,因此将消耗更多内存,而原型(prototype)仅定义一个在所有实例之间共享的函数Gallery 实例。这是正确的吗?
非常感谢!
最佳答案
构造函数中的方法定义速度较慢,因为每次创建新对象时都会执行它。
另一方面,通过原型(prototype)
,虚拟机将能够优化对其的访问,优化功能(因为它们是共享的 - 如果每个实例都有自己的功能)。
(不再详细介绍,因为已经解释过,但基本上,VM(我知道 v8 是这样做的,不确定其他人做什么)通常会为每个原型(prototype)提供一个带有优化字段的“隐藏类”,而不是只是将其作为任何 => 任何的 map )
这也为以后添加功能提供了更大的灵 active 。
在对象上添加方法的唯一好处是您可以更轻松地伪造“私有(private)”字段。
关于javascript - JS面向对象: methods on prototype vs methods in constructor function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24337020/