什么是继承呢
就是子类可以使用父类的所有功能,并对这些功能进行扩展。
继承的方式
原型链继承
mdn:当谈到继承时,JavaScript 只有一种结构:对象。每个实例对象( object )都有一个私有属性(称之为 __ proto __ )指向它的构造函数的原型对象(prototype )。该原型对象也有一个自己的原型对象( __ proto __ ) ,层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。
由上可知,每个对象都会有__ proto __的私有属性指向原型对象prototype,直到原型对象的原型为空。
__ proto __ 和prototype的区别是什么呢
__ proto __ 和prototype都存着原型的地址,prototype放在函数上,而__ proto __放在新生成的对象上
综上所述我们又可以得出一些结论
function Animal(color){
this.color = color
}
Animal.prototype.move = function(){}
function Dog(color, name){
Animal.call(this, color)
this.name = name
}
// 下面三行实现 Dog.prototype.__proto__ = Animal.prototype
function temp(){}
temp.prototype = Animal.prototype
Dog.prototype = new temp()
Dog.prototype.constuctor = Dog
Dog.prototype.say = function(){ console.log('汪')}
var dog = new Dog('黄色','阿黄')
类继承
实现类继承首先需要一个父类,在js中实际上是没有类的概念,在es6中class虽然很像类,但实际上只是es5上语法糖而已
//父类Actor
class Actor {
constructor(name = '演员') {
this.name = name;
}
act() {
console.log(`${this.name}在拍剧`)
}
}
//继承父类的字类HandsomeMan
class HandsomeMan extends Actor {
constructor(name = '胡歌') {
//继承父类属性
super(name);
}
act() {
//继承父类方法
super.act()
}
}
let handsomeMan = new HandsomeMan()
handsomeMan.act()