当我阅读有关 javascript 中的原型(prototype)时,我有一个问题。
假设我有以下函数和对象
Function #1:
function Rectangle(w,h){
this.width = w;
this.height = h;
this.area = function(){return this.width * this.height}
}
var object1 = new Rectangle(10,5);
var object11 = new Rectangle(5,5);
Function #2:
function Rectangle(w,h){
this.width = w;
this.height = h;
}
Rectangle.prototype.area = function(){ return this.width * this.height; }
var object2 = new Rectangle(10,5);
var object22 = new Rectangle(5,5);
据我了解,object2 和 object22 使用的内存比 object1 和 object11 少,因为函数 #2 使用原型(prototype)。
这是正确的吗?
最佳答案
是的,理论上是正确的,因为函数 1 每次调用时都会为区域
创建一个唯一的函数
,而使用函数 2 创建的对象都引用一个公共(public)函数。
但是,每个 JavaScript 引擎都会有不同的优化,并且可以优化函数 1,以便在内部每个对象都指向相同的函数,直到其中一个对象被修改(这是必要的,因为就语言而言,每个函数都是唯一的,为一个函数附加一个属性不应影响其他函数)。
网络上关于每个浏览器执行的具体优化的文档很少,但这里有一些引用文献似乎指向某种形式的关闭优化:
关于Javascript原型(prototype)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5139720/