javascript中实现继承的三种方式(一看就懂)
2017-04-30 13:40
579 查看
1、原型继承
// 父类
function Persion(name,age){
this.name = name;
this.age = age;
}
// 父类的原型对象属性
Persion.prototype.id = 10;
// 子类
function Boy(sex){
this.sex = sex;
}
// 继承实现
Boy.prototype = new Persion('c5',27);
var b = new Boy();
alert(b.name)// c5
alert(b.id)//10
这种原型继承的特点:既继承了父类的模板,又继承了父类的原型对象。优点是继承了父类的模板,又继承了父类的原型对象,缺点就是父类实例传参,不是子类实例化传参,不符合常规语言的写法。
2、类继承(借用构造函数的方式继承)
// 父类
function Persion(name,age){
this.name = name;
this.age = age;
}
// 父类的原型对象属性
Persion.prototype.id = 10;
// 子类
function Boy(name,age,sex){
//call apply 实现继承
Persion.call(this,name,age);
this.sex = sex;
}
var b = new Boy('c5',27,'男');
alert(b.name)// c5
alert(b.id)//undinfind 父类的原型对象并没有继承
这种原型继承的特点:继承了父类的模板,不继承了父类的原型对象。优点是[b]方便了子类实例传参,缺点就是不继承了父类的原型对象[/b]
[b][b]3、混合继承(原型继承和类继承)
[/b][/b]
// 父类
function Persion(name,age){
this.name = name;
this.age = age;
}
// 父类的原型对象属性
Persion.prototype.id = 10;
// 子类
function Boy(name,age,sex){
//call apply 实现继承
Persion.call(this,name,age);
this.sex = sex;
}
// 原型继承实现 参数为空 代表 父类的实例和父类的原型对象的关系了
Boy.prototype = new Persion();
var b = new Boy('c5',27,'男');
alert(b.name)// c5
alert(b.id)//10
这种原型继承的特点:[b]既继承了父类的模板,又继承了父类的原型对象。优点方便了子类实例传参,缺点就是Boy.pertotype = new Persion() 函数又实例一次,函数内部变量又重复实例一次,大程序时候会很好性能。
[/b]
// 父类
function Persion(name,age){
this.name = name;
this.age = age;
}
// 父类的原型对象属性
Persion.prototype.id = 10;
// 子类
function Boy(sex){
this.sex = sex;
}
// 继承实现
Boy.prototype = new Persion('c5',27);
var b = new Boy();
alert(b.name)// c5
alert(b.id)//10
这种原型继承的特点:既继承了父类的模板,又继承了父类的原型对象。优点是继承了父类的模板,又继承了父类的原型对象,缺点就是父类实例传参,不是子类实例化传参,不符合常规语言的写法。
2、类继承(借用构造函数的方式继承)
// 父类
function Persion(name,age){
this.name = name;
this.age = age;
}
// 父类的原型对象属性
Persion.prototype.id = 10;
// 子类
function Boy(name,age,sex){
//call apply 实现继承
Persion.call(this,name,age);
this.sex = sex;
}
var b = new Boy('c5',27,'男');
alert(b.name)// c5
alert(b.id)//undinfind 父类的原型对象并没有继承
这种原型继承的特点:继承了父类的模板,不继承了父类的原型对象。优点是[b]方便了子类实例传参,缺点就是不继承了父类的原型对象[/b]
[b][b]3、混合继承(原型继承和类继承)
[/b][/b]
// 父类
function Persion(name,age){
this.name = name;
this.age = age;
}
// 父类的原型对象属性
Persion.prototype.id = 10;
// 子类
function Boy(name,age,sex){
//call apply 实现继承
Persion.call(this,name,age);
this.sex = sex;
}
// 原型继承实现 参数为空 代表 父类的实例和父类的原型对象的关系了
Boy.prototype = new Persion();
var b = new Boy('c5',27,'男');
alert(b.name)// c5
alert(b.id)//10
这种原型继承的特点:[b]既继承了父类的模板,又继承了父类的原型对象。优点方便了子类实例传参,缺点就是Boy.pertotype = new Persion() 函数又实例一次,函数内部变量又重复实例一次,大程序时候会很好性能。
[/b]
相关文章推荐
- JavaScript面向对象(三)——继承与闭包、JS实现继承的三种方式
- 实现JavaScript中继承的三种方式
- 实现JavaScript中继承的三种方式
- JavaScript中实现继承的三种方式和实例
- 实现JavaScript中继承的三种方式
- 实现JavaScript中继承的三种方式
- 实现JavaScript中继承的三种方式
- Javascript 实现继承的三种方式
- 实现JavaScript中继承的三种方式
- 实现JavaScript中继承的三种方式
- JavaScript中实现继承的三种方式和实例
- ASP.NET MVC2中三种ajax实现方式-原始JavaScript
- javascript实现继承的几种方式(出自《四火的唠叨》)
- JavaScript实现继承机制(3)——通过原型链(prototype chaining)方式
- 使用混合方式实现javascript中对象的继承(推荐使用)
- 绑定Service的三种实现方式之继承Binder类
- javascript 继承实现方式
- 基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
- 讲述Javascript 实现继承的方式(基础知识)
- 从继承方式的实现看javascript语言的设计初衷