拷贝继承

继承描述 : 子类不影响父类,子类可以继承父类的一些功能 ( 代码复用 )

拷贝继承适用范围:通用型的,有new或无new的时候都可以

 

一、属性的继承

方法: 调用父类的构造函数,利用 call 方法改变this指向

function CreatePerson(name,sex){   //父类构造函数
    this.name = name;
    this.sex = sex;
}
function CreateStar(name,sex,job){  //子类构造函数
    CreatePerson.call(this,name,sex);    //继承父类的构造函数,下一行的this原本指向p2,利用call方法把下一行的this转为p1里的this
    this.job = job;
    
}
var p1 = new CreatePerson('小明','男');
var p2 = new CreateStar('黄晓明','男','演员');  //比p1多了一个演员的属性,所以继承父类的构造函数后,再添加新的属性

 

二、方法的继承

方法1:将父类的原型直接赋值给子类的原型(不推荐)

方法2:利用for in

写法:

function extend(obj1,obj2){  //封装好的函数
    for(var attr in obj2){
        obj1[attr] = obj2[attr];
    }
}
extend( 子类构造函数.prototype , 父类构造函数.prototype );

例子:

function CreatePerson(name,sex){   //父类构造函数
    this.name = name;
    this.sex = sex;
}
CreatePerson.prototype.showName = function(){ //父类方法
    alert( this.name );
};
var p1 = new CreatePerson('小明','男');
var p2 = new CreateStar('黄晓明','男','演员');
extend( CreateStar.prototype , CreatePerson.prototype );  //p2继承父类的方法,利用封装的extend函数
function extend(obj1,obj2){
    for(var attr in obj2){
        obj1[attr] = obj2[attr];
    }
}
p2.showName();  //黄晓明

 

posted @ 2017-12-07 14:28  念念念不忘  阅读(550)  评论(0)    收藏  举报