1、原型继承
// 父类
function Persion(name,age){
= name;
= age;
}
// 父类的原型对象属性
= 10;
// 子类
function Boy(sex){
= sex;
}
// 继承实现
= new Persion('c5',27);
var b = new Boy();
alert()// c5
alert()//10
这种原型继承的特点:既继承了父类的模板,又继承了父类的原型对象。优点是 继承了父类的模板,又继承了父类的原型对象,缺点就是父类实例传参,不是子类实例化传参,不符合常规语言的写法。
2、类继承(借用构造函数的方式继承)
// 父类
function Persion(name,age){
= name;
= age;
}
// 父类的原型对象属性
= 10;
// 子类
function Boy(name,age,sex){
//call apply 实现继承
(this,name,age);
= sex;
}
var b = new Boy('c5',27,'男');
alert()// c5
alert()//undinfind 父类的原型对象并没有继承
这种原型继承的特点:继承了父类的模板,不继承了父类的原型对象。优点是方便了子类实例传参,缺点就是不继承了父类的原型对象
3、混合继承(原型继承和类继承)
// 父类
function Persion(name,age){
= name;
= age;
}
// 父类的原型对象属性
= 10;
// 子类
function Boy(name,age,sex){
//call apply 实现继承
(this,name,age);
= sex;
}
// 原型继承实现 参数为空 代表 父类的实例和父类的原型对象的关系了
= new Persion();
var b = new Boy('c5',27,'男');
alert()// c5
alert()//10
这种原型继承的特点:既继承了父类的模板,又继承了父类的原型对象。优点方便了子类实例传参,缺点就是 = new Persion() 函数又实例一次,函数内部变量又重复实例一次,大程序时候会很好性能。