ES5对象继承

//===========es5中的继承 =============

function Person(){

    this.name='David';//属性 

    this.age=20;

    this.run=function(){//实例方法 

        console.log(this.name+'在运动');

    }

}

// 在原型链上添加属性和方法   原型链上的属性会被多个实例共享,构造函数不会

Person.prototype.sex='男';

Person.prototype.work=function(){

    console.log(this.name+'在工作');

}

//===========Per类继承Person类  ——对象冒充实现继承   

function Per(){

    Person.call(this);  //对象冒充实现继承

}

var p1 = new Per();

p1.run();//可以执行  对象冒充可以继承构造函数里面的属性和方法

p1.work();//执行失败 对象冒充可以继承构造函数里面的属性和方法,但是没法继承原型链上的属性和方法

 

//===========Man类继承Person类  ——原型链继承

function Man(){

}

Man.prototype=new Person();//原型链实现继承 :既可以继承构造函数上的属性和方法,也可以继承原型链上的属性和方法

var m1=new Man();

m1.run();

m1.work();

//===========原型链继承的问题

function Person1(name,age){

    this.name=name;//属性

    this.age=20;

    this.run=function(){//实例方法

        console.log(this.name+'在运动');

    }

}

// 在原型链上添加属性和方法   原型链上的属性会被多个实例共享,构造函数不会

Person1.prototype.sex='男';

Person1.prototype.work=function(){

    console.log(this.name+'在工作');

}

var p2=new Person1('David',20);

p2.run();

p2.work();

 

function Man2(name,age){

}

Man2.prototype=new Person1();

var m2=new Man2('wendy',30);//实例化子类的时候没法给父类传参

m2.run();// 打印结果:undefined在运动

 

//===========原型链+对象冒充的组合继承模式

function Man3(name,age){

    Person1.call(this,name,age);//对象冒充继承  实例化子类可以给父类传参

}

Man3.prototype=new Person1();

var m3=new Man3('wendy',30);

m3.run();

m3.work();

//===========原型链+对象冒充的组合继承模式 另一种写法

function Man4(name,age){

    Person1.call(this,name,age);//对象冒充继承  实例化子类可以给父类传参

}

Man4.prototype=Person1.prototype;

var m4=new Man4('wendy4',40);

m4.run();

m4.work();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值