当我在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使用原型。
这是正确的吗?
答案 0 :(得分:3)
是的,理论上是正确的,因为函数1每次调用时都会为function
创建一个唯一的area
,而使用函数2创建的对象都会引用一个共同的函数。
但是,每个JavaScript引擎都有不同的优化,并且可以优化Function 1,以便内部每个对象指向相同的函数,直到其中一个被修改(这是必要的,因为就语言而言,每个函数都是唯一的,并且将属性附加到一个函数不应该影响其他函数。)
网上关于每个浏览器执行的特定优化的文档很少,但是这里有一些参考似乎指向某种形式的闭包优化:
答案 1 :(得分:1)
对于Javascript的经典视图来说,这是“正确的”。我认为现代javascript编译器可以减轻第一种方法的浪费,但是如果你创建了许多可以在原型上共享函数的小对象,我仍然认为这样做很好。