原型和继承

时间:2013-05-25 12:55:12

标签: javascript

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

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( );

此解决方案效果更好,但仍然不是最佳的(为什么)。创建的每个矩形都有 三个属性(是的,等等什么?)。宽度和高度属性可能各不相同 矩形,但每个Rectangle对象的区域总是指相同的 功能(有人可能会改变它,当然,你通常会打算使用这些方法 一个对象是恒定的)。使用方法的常规属性是低效的 打算由同一个类的所有对象共享(为什么???这是什么问题?)(即所有对象 使用相同的构造函数创建)。

1 个答案:

答案 0 :(得分:5)

  

Rectangle对象总是引用相同的函数

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

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

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

Rectangle.prototype.area = function() {
    return this.width * this.height;
};