Javascript原型问题

时间:2011-02-28 08:38:57

标签: javascript memory prototype

当我在javascript中阅读原型时,我有一个问题。

假设我有以下功能和对象

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使用原型。

这是正确的吗?

2 个答案:

答案 0 :(得分:3)

是的,理论上是正确的,因为函数1每次调用时都会为function创建一个唯一的area,而使用函数2创建的对象都会引用一个共同的函数。

但是,每个JavaScript引擎都有不同的优化,并且可以优化Function 1,以便内部每个对象指向相同的函数,直到其中一个被修改(这是必要的,因为就语言而言,每个函数都是唯一的,并且将属性附加到一个函数不应该影响其他函数。)

网上关于每个浏览器执行的特定优化的文档很少,但是这里有一些参考似乎指向某种形式的闭包优化:

答案 1 :(得分:1)

对于Javascript的经典视图来说,这是“正确的”。我认为现代javascript编译器可以减轻第一种方法的浪费,但是如果你创建了许多可以在原型上共享函数的小对象,我仍然认为这样做很好。