Javascript对象继承

在面向对象的编程方法中,对象继承是必不可少的,那么怎么在javascript中实现继承机制呢。由于javascript并不是一个严格的面向对象的语言,因此在对象继承上也显的不一样。我们也来创建一个基类Polygon,代表一个多边形,一个多边形有个共同的属性就是边数(sides)和一个共同的方法计算面积(getAreas)。这样我们的这具Polygon类看起来就像下面这样定义:
function Polygon(iSides)
{
    
this.sides = iSides;
}


Polygon.prototype.getAreas 
= function()
{
    
return 0;
}
因为基类并不能确定面积,因此在这里我们返回为0。
接着我们就创建一个子类Triangle,一个三角形,显然这个三角形是要从多边形继承的,因此我们要让这个Triangle类继承Polygon类,并且要覆盖Polygon类的getAreas方法来返回三角形的面积。我们来看下在javascript中的实现:
function Triangle(iBase, iHeight)
{
    Polygon.call(
this,3);      //在这里我们用Polygon.call()来调用Polygon的构造函数,并将3作为参数,表示这是一个三角形,因为边是确定的,所以在子类的构造函数中就不需要指定边了
    this.base = iBase;         //三角形的底
    this.height = iHeight;     //三角形的高
}


Triangle.prototype 
= new Polygon();
Triangle.prototype.getAreas 
= function()
{
    
return 0.5 * this.base *this.height;  //覆盖基类的getAreas方法,返回三角形的面积
}
参考上面的实现,我们再定义一个矩形:
function Rectangle(iWidth, iHeight)
{
    Polygon.call(
this,4);
    
this.width = iWidth;
    
this.height = iHeight;
}


Rectangle.prototype 
= new Polygon();
Rectangle.prototype.getAreas 
= function()
{
    
return this.width * this.height;
}

好了,上面我们定义了一个基类和两个子数,下面我们来测试一个这两个子类是否能正常工作:
var t = new Triangle(3,6);
var r = new Rectangle(4,5);

alert(t.getAreas());    
//输出9说明正确
alert(r.getAreas());    //输出20说明正确

posted @ 2008-06-30 10:15  Jumper  阅读(914)  评论(0编辑  收藏  举报