继承的概念
继承:通过一定的方式事项某个类型A获取另外一个类型B的属性和方法其中类型A就是子类型,类型B就是父类型。
Javascript的继承
Object是所有对象的父级|父类型|超类型,
js中所有的对象都直接或间接继承自Object。继承有两种方式,接受继承和实现继承,
在js中只有实现继承,试下继承主要依赖原型链来完成。
Javascript实现继承的几种方式
1.原型式继承
2.原型链继承
3.经典继承
4.组合继承
原型式继承 原型链继承方式A
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <script> //提供一个构造函数 function Person(name,age) { this.name = name; this.age = age; }; //设置原型对象的属性 Person.prototype.className = '1班'; //使用构造函数来创建原型对象 var p1 = new Person('小明',10); var p2 = new Person('小红',20); //打印p1,p2的className console.log(p1.className); //1班 console.log(p2.className); //1班 </script>
原型链继承方式B
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <script> //提供一个构造函数 function Person(name,age) { this.name = name; this.age = age; }; //设置原型对象的属性 Person.prototype = { constructor:Person, className:'1班' }; //使用构造函数来创建原型对象 var p1 = new Person('小明',10); var p2 = new Person('小红',20); //打印p1,p2的className console.log(p1.className); //1班 console.log(p2.className); //1班 //对象p1,p2继承了构造函数原型对象的属性className, 但是使用原型替换的方式实现继承的时候,原有原型对象中的属性和方法会丢失。 </script>
原型链继承方式C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 //提供一个超类型|父类型构造函数 function SuperPerson() { this.name = 'SuperPerson'; this.showName = function() { console.log(this.name); } } //设置父类型的原型属性和原型方法 SuperPerson.prototype.info = 'SuperPerson的信息'; SuperPerson.prototype.showinfo = function() { console.log(this.info); } //提供子类型 function Person() {}; //设置继承 Person.prototype = SuperPerson.prototype; Person.prototype.constructor = Person; var p1 = new Person(); console.log(p1.name); //undefined console.log(p1.info); //SuperPerson的信息 p1.showinfo(); //SuperPerson的信息 p1.showName(); //not a function
结论
上面的方式可以继承父类型的原型属性和原型方法,但是无法继承实例属性和实例方法
<
JS瀑布流
起点
>