3步 实现Javascript继承
如果你是Javascript大牛,此文章对你无意义.
@author YHC
首先在Javascript中是没有继承extend这个关键字的,那么在Java,C#,....等等面向对象语言中,在继承时可通过关键字实现,他们的运行原理也许有所不同,但是他们都有一个共同点就是
在调用子类的构造函数时,都隐示调用了父类的构造方法,那么在js中我们也可以通过代码 实现.分为3步:
1.在子类构造函数中调用父类构造函数.
2.修改子类prototype(原型链)属性为父类的实例.
3.重置子类的prototype的constructor属性为子类.
代码:
[javascript]
/**
Person类
*/
function Person(name){
//赋值name属性
this.name=name;
/**
获得Person类的name属性
*/
this.getName=function(){
return this.name;
};
}
////创建Person类实例
var pp=new Person('Master');
//输出name属性值
alert(pp.getName()); //结果:Master
/**
Student类
**/
function Student(name,score){
//调用父类构造方法,并传递name参数
Person.call(this,name);
//赋值Score属性
this.score=score;
/**
获得score属性值
*/
this.getScore=function(){
return score;
};
}
//将Student的原型链指向Person对象
Student.prototype=new Person();
//重置constructor属性为Student类,由于设置了Student类的prototype为Person时
//擦除了constructor属性
Student.prototype.constructor=Student;
//实例化Student类
var s=new Student('Master',100);
//输出学生name和score属性值
alert(s.getName()+':'+s.getScore());//结果:Master:100
/**
Person类
*/
function Person(name){
//赋值name属性
this.name=name;
/**
获得Person类的name属性
*/
this.getName=function(){
return this.name;
};
}
////创建Person类实例
var pp=new Person('Master');
//输出name属性值
alert(pp.getName()); //结果:Master
/**
Student类
**/
function Student(name,score){
//调用父类构造方法,并传递name参数
Person.call(this,name);
//赋值Score属性
this.score=score;
/**
获得score属性值
*/
this.getScore=function(){
return score;
};
}
//将Student的原型链指向Person对象
Student.prototype=new Person();
//重置constructor属性为Student类,由于设置了Student类的prototype为Person时
//擦除了constructor属性
Student.prototype.constructor=Student;
//实例化Student类
var s=new Student('Master',100);
//输出学生name和score属性值
alert(s.getName()+':'+s.getScore());//结果:Master:100
在Javascript中每一个对象都有一个prototype属性,这个属性要么是null要么是指向一个对象.在Student s对象访问s.getName()属性时如果这个方法或者成员在本对象中为查找到
那么JavaScript会逐一易做图每一个原型对象,直到找到该成员为止,或者一个查找到Object.prototype对象.如果是这样那么继承另一个类我们就只需要将子类的prototype属性指向父类的示例就OK了,
那么为什么我们还需要重置子类Student.prototype.constructor属性?因为我们在设置Student.prototype这个属性为父类实例的时候这个属性被擦除了,所以需要重置.
补充:web前端 , JavaScript ,