您的位置:首页 > Web前端 > JavaScript

JavaScript中的3种继承方式

2017-07-27 00:00 169 查看
JavaScript中继承的方式主要有3种;

第一种:原型链继承,通过将子元素的原型指向父元素的实例对象来实现继承 ;

缺点:字面量重写原型会中断关系,使用引用类型的原型,并且子类型还无法给超类型传递参数

第二种:借用构造函数继承,通过继承父元素的构造函数,来继承其构造函数中声明的一些属性和方法;

缺点:借用构造函数虽然解决了刚才两种问题,但没有原型,则复用无从谈起。所以我们需要原型链+借用构造函数的模式,这种模式称为组合继承

第三种:原型链+构造函数,在原型中处理方法,在构造函数中处理属性。

优点:组合式继承是比较常用的一种继承方法,其背后的思路是 使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。这样,既通过在原型上定义方法实现了函数复用,又保证每个实例都有它自己的属性。

备注:放在代码段里是为了方便测试和学习

//(1)原型链
function Animal(name,age) {
this.name = name;
this.age = age;
};
Animal.prototype.sayHello = function () {
alert('hello');
};
function Dog(name,age) {
//(2)借用构造函数
Animal.call(this,name,age);
}
Dog.prototype = new Animal();
Dog.prototype.run = function () {
alert(this.name);
}
var dog = new Dog('huahua',2);
console.log(dog);
dog.sayHello();
dog.run();
//1)通过原型来实现继承时,原型实际上会变成另一个类型的实例,原来的实例属性也就变成了现在的原型属性
// 2)在创建子类型的实例时,不能向超类型的构造函数传递参数。

//(3)伪经典继承
// 将原型链和借用构造函数的技术组合在一起。
// 原理是:使用原型链实现对原型属性和方法的继承,而通过借用构造函数实现对实例属性的继承。

继承关系图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: