ECMA多重继承支持:
function
ClassX()
...
{
this.messageX="This is the X message.";
if(typeof ClassX._initialized=="undefined")...{
ClassX.prototype.sayMessageX=function()...{
alert(this.messageX);
};
ClassX._initialized=true;
}
}
function ClassY() ... {
this.messageY="This is the Y message.";
if(typeof ClassY._initialized=="underfined")...{
ClassY.prototype.sayMessageY=function()...{
alert (this.messageY);
};
ClassY._ini8tiaized=true;
}
}
this.messageX="This is the X message.";
if(typeof ClassX._initialized=="undefined")...{
ClassX.prototype.sayMessageX=function()...{
alert(this.messageX);
};
ClassX._initialized=true;
}
}
function ClassY() ... {
this.messageY="This is the Y message.";
if(typeof ClassY._initialized=="underfined")...{
ClassY.prototype.sayMessageY=function()...{
alert (this.messageY);
};
ClassY._ini8tiaized=true;
}
}
ClassX和ClassY类都是小类,都只有一个属性和一个方法。假设现有ClassZ类,需要继承者两个类。如下:
function
ClassZ()
...
{
ClassX.apply(this);
ClassY.apply(this);
this.message="This is thie Z message.";
if(typeof ClassZ._initialized=="undefined")...{
ClassZ.prototype.inheritFrom(ClassX);
ClassZ.prototype.inheritFrom(ClassY);
ClassZ.prototype.sayMessageZ=function()...{
alert(this.messageZ);
};
ClassZ._initialized=true;
}
}
ClassX.apply(this);
ClassY.apply(this);
this.message="This is thie Z message.";
if(typeof ClassZ._initialized=="undefined")...{
ClassZ.prototype.inheritFrom(ClassX);
ClassZ.prototype.inheritFrom(ClassY);
ClassZ.prototype.sayMessageZ=function()...{
alert(this.messageZ);
};
ClassZ._initialized=true;
}
}
注意继承属性的两行代码(使用apply()方法)和继承方法的两行代码(使用inheritFrom()方法)。继承的顺序非常重要。测试代码如下:
var
objZ
=
new
ClassZ();
objZ.sayMessageX(); // outputs "This is X message."
objZ.sayMessageY(); // outputs "This is Y message."
objZ.sayMessageZ(); // outputs "This is Z message."
objZ.sayMessageX(); // outputs "This is X message."
objZ.sayMessageY(); // outputs "This is Y message."
objZ.sayMessageZ(); // outputs "This is Z message."