/**对象的继承*/
//允许多继承
//实现方式
// 1 对象冒充
// 2 call()方式
// 3 apply()方式
// 4 原型链
// 5 混合方式
/** 1、对象冒充*/
//新的类冒充旧的类,旧类必须采用构造函数方式,必须使用构造函数
//原理:A的构造函数成为B的方法并调用,B就会收到A的构造函数中定义的属性和方法
//A类
function People(name) {
this.name=name;
this.say=function () {
alert("我们是:"+this.name);
}
}
//B类
function Student(name) {
this.inherit=People;//冒充
this.inherit(name);//继承
delete this.inherit;//删除继承
this.score=function () {//然后再定义新方法以及新属性
alert("90分");
}
}
//使用
var tom=new Student("Tom");
tom.say();
tom.score();
//超类二
function middleStudent(age,sex) {
this.age=age;
this.sex=sex;
}
//子类继承多个超类
function middle(name,age,sex) {
this.inherit = People;//冒充
this.inherit(name);//继承
delete this.inherit;//删除继承
this.inherit=middleStudent;//冒充
this.inherit(age,sex);//继承
delete this.inherit;//删除继承
}
//测试
var jerry = new middle("Lily",20,"女");
jerry.say();
alert(jerry.sex);
/**=================================================================================*/
/** 2、call()方式*/
//用于继承属性
//call()函数是封装的对象冒充的一个函数
function WhitePeople(name) {
// this.inherit=People;
// this.inherit(name);
// delete this.inherit;
//上种方式等价于call()
this.call(this,name);
this.area=function () {
alert("地区")
}
}
var wp = new WhitePeople("aobam");
wp.area();
wp.say();
/**=======================================================================================*/
/** 3、apply()*/
//用于继承属性
//是对象冒充的一个封装函数
//格式:基类.apply(对象,参数数组)
function White_collar(name,age,sex) {
People.apply(this,new Array(name));
middle.apply(this,[age,sex]);
}
var collar = new White_collar("broa","22","女");
collar.say();
alert(collar.age);
/**========================================================================================*/
/** 4、原型链*/
// 不支持多重继承、无法用带参数构造函数
//定义基类--原型方式
function Blue_collar() {
}
Blue_collar.prototype.name="hehd";
Blue_collar.prototype.say=function () {
alert("我是"+this.name);
}
//定义子类--原型方式
function City_blue_collar() {
}
City_blue_collar.prototype=new Blue_collar();//继承
//测试
var jj = new City_blue_collar();
jj.say();
/**========================================================================================*/
/** 5、混合方式*/
//使用构造函数定义类,没有使用原型
//用对象冒充继承构造函数的属性、用原型链继承prototype对象的方法
//基类
function Beauty(name) {
this.name=name;
}
Beauty.prototype.say=function () {
alert("我该休息了");
}
//子类
function China_beauty(name,area) {
Beauty.call(this,name);
this.area=area;
}
China_beauty.prototype=new Beauty();
China_beauty.prototype.from=function () {
alert("我来自"+this.area);
}
var superstar = new China_beauty("陆毅","china");
superstar.say();
superstar.from();
初识javascript之对象继承
最新推荐文章于 2022-08-24 11:59:37 发布