在 JavaScript 中,我们有两种方法可以创建“类”并为其提供公共函数。
方法一:
function MyClass() {
var privateInstanceVariable = 'foo';
this.myFunc = function() { alert(privateInstanceVariable ); }
}
方法二:
function MyClass() { }
MyClass.prototype.myFunc = function() {
alert("I can't use private instance variables. :(");
}
我读过很多次人们说使用方法 2 效率更高,因为所有实例共享相同的函数副本,而不是每个实例都拥有自己的副本。但是,通过原型定义函数有一个巨大的缺点——它不可能拥有私有实例变量。
即使在理论上,使用方法 1 为对象的每个实例提供了自己的函数副本(因此使用了更多的内存,更不用说分配所需的时间了) - 这在实践中实际发生了什么?似乎 Web 浏览器可以轻松进行的优化是识别这种极其常见的模式,并且实际上让对象的所有实例都引用通过这些“构造函数”定义的函数的相同副本。然后,如果稍后显式更改它,它只能为实例提供自己的函数副本。
任何关于两者之间性能差异的见解 - 或者甚至更好的现实世界经验- 都将非常有帮助。