<span style="color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; line-height: 28px; text-indent: 28px; background-color: rgb(248, 248, 248);">JavaScript想要实现继承有两种实现方式,分别是类式继承和原型式继承,每种实现的方式都需要采取不少措施</span>
/* -- 类式继承 -- */
//先声明一个超类
function Person(name){
this.name = name;
}
//给这个超类的原型对象上添加方法 getName
Person.prototype.getName = function(){
return this.name;
}
//实例化这个超类
var a = new Person('Darren1')
alert(a.getName());
//再声明类
function Programmer(name,sex){
//这个类中要调用超类Person的构造函数,并将参数name传给它
Person.call(this,name);
this.sex = sex;
}
//这个子类的原型对象等于超类的实例
Programmer.prototype = new Person();
//因为子类的原型对象等于超类的实例,所以prototype.constructor这个方法也等于超类构造函数,你可以自己测试一下,如果没这一步,alert(Programmer.prototype.constructor),这个是Person超类的引用,所以要从新赋值为自己本身
Programmer.prototype.constructor = Programmer;
//子类本身添加了getSex 方法
Programmer.prototype.getSex = function(){
return this.sex;
}
//实例化这个子类
var _m = new Programmer('Darren2','male');
//自身的方法
alert(_m.getSex());
//继承超类的方法
alert(_m.getName());
代码都不难,只要对 原型链 有基础就能理解。类式继承模式是JavaScript继承主要的模式,几乎所有用面向对象方式编写的JavaScript代码中都用到了这种继承,又因为在各种流行语言中只有JavaScript使用原型式继承,因此最好还是使用类式继承。可是要熟悉JavaScript语言,原型继承也是我们必须所了解的,至于在项目中是否使用就得看个人编码风格了
/* -- 原型式继承 -- */
//clone()函数用来创建新的类Person对象
var clone = function(obj){
var _f = function(){};
//这句是原型式继承最核心的地方,函数的原型对象为对象字面量
_f.prototype = obj;
return new _f;
}
//先声明一个对象字面量
var Person = {
name:'Darren',
getName:function(){
return this.name;
}
}
//不需要定义一个Person的子类,只要执行一次克隆即可
var Programmer = clone(Person);
//可以直接获得Person提供的默认值,也可以添加或者修改属性和方法
alert(Programmer.getName())
Programmer.name = 'Darren2'
alert(Programmer.getName())
//声明子类,执行一次克隆即可
var Someone = clone(Programmer);