拷贝继承
继承描述 : 子类不影响父类,子类可以继承父类的一些功能 ( 代码复用 )
拷贝继承适用范围:通用型的,有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(); //黄晓明