初识javascript之对象继承

 
 
/**对象的继承*/
//允许多继承
//实现方式
//  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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值