方法一: 对象冒充(用这种方法还可以实现多重继承)
其原理如下:构造函数使用this关键字给所有属性和方法赋值(即采用类声明的构造方式)。因为构造函数只是一个函数,所以可以使ClassA的构造函数成为ClassB的方法,然后调用它。ClassB就会收到ClassA的构造函数中定义的属性和方法。
方法二:利用call()和apply()方法进行调用。
方法三:原型链(prototype)
方法四:混合方式
问题: 对象冒充的主要问题是必须使用构造函数方式,这不是最好的选择,如果使用原型链,就无法使用带参数的构造函数了。因此选择了混合方式来兼用两者。
实例:
var PolygonCls=function(iSides)
{
this.sides=iSides;
}
PolygonCls.prototype.getArea=function()
{
return 0;
};
var TriangleCls=function(iBase,iHeight)
{
PolygonCls.call(this,3);
this.base=iBase;
this.height=iHeight;
}
TriangleCls.prototype=new PolygonCls();
TriangleCls.prototype.getArea=function()
{
return 0.5*this.base*this.height;
};
var RectangleCls=function(iLength,iWidth)
{
PolygonCls.call(this,4);
this.length=iLength;
this.width=iWidth;
}
RectangleCls.prototype=new PolygonCls();
RectangleCls.prototype.getArea=function()
{
return this.length*this.width;
};