0

最近我开始学习 Javascript,因为我来自 Java 世界。我得到了这本书,名为JavaScript The Definitive guide。. 我现在对原型和继承有点困惑。我想知道将函数设置为对象属性和函数原型有什么区别。从书中的例子:

function Rectangle(w, h) {
this.width = w;
this.height = h;
this.area = function( ) { return this.width * this.height; }
}

使用这个新版本的构造函数,您可以编写如下代码:

// How big is a sheet of U.S. Letter paper in square inches?
var r = new Rectangle(8.5, 11);
var a = r.area( );

该解决方案效果更好,但仍然不是最佳的(为什么)。创建的每个矩形都将具有三个属性(是的,那又如何?)。每个矩形的 width 和 height 属性可能不同,但每个 Rectangle 对象的面积总是指同一个函数(当然有人可能会更改它,但您通常希望对象的方法保持不变)。对旨在由同一类的所有对象共享的方法使用常规属性是低效的(为什么?有什么问题?)(即,使用相同的构造函数创建的所有对象)。

4

1 回答 1

5

矩形对象总是引用同一个函数

这是不正确的。每个rectangle对象都有自己的分配给area属性的函数副本。

而如果您使用基于原型的定义,您将在所有实例之间共享一个函数。

因此,从性能和内存消耗的角度来看,最好将其定义为

Rectangle.prototype.area = function() {
    return this.width * this.height;
};
于 2013-05-25T12:57:33.247 回答