/* 继承方式一: 对象冒充,构造函数只是一个函数,所以可以使ClassA的构造函数称为ClassB的方法,然后调用它。this指向的是所属的对象 */
// 超类ClassA
function ClassA(color){
this.color = color;
this.sayColor = function(){
alert(this.color);
}
}
// 超类ClassB
function ClassB(age){
this.age = age;
this.sayAge = function(){
alert(this.age);
}
}
//对象继承可以实现多重继承
function ClassC(color,name,age){
//函数名只是指向它的指针
this.newMethod = ClassA;
this.newMethod(color);
//delete删除了对ClassA的引用,这样以后就不能在调用它。
delete this.newMethod;
//多重继承需要注意的事,如果ClassA和ClassB具有同名的属性和方法,ClassB具有高优先级,因为继承的是最后的类。
this.newMethod = ClassB;
this.newMethod(age);
delete this.newMethod;
//所有的新属性和新方法都必须在删除了新方法的代码后定义,否者可能会覆盖掉超类的相关属性和方法。
this.name = name;
this.sayName = function(){
alert(this.name);
}
}
var objA = new ClassA("black");
var objB = new ClassB(26);
var objC = new ClassC("yellow","pape",25);
objA.sayColor(); //black
objB.sayAge(); //26
objC.sayColor(); //yellow
objC.sayName(); //pape
objC.sayAge(); //25