继承是代码复用的一种重要方式
ES 5 使用 prototype,__proto__原型继承
- 定义新的构造函数,并在内部用call()调用希望“继承”的构造函数,并绑定this;
- 借助中间函数F桥接实现原型链继承,最好通过封装的inherits函数完成;
- 继续在新的构造函数的原型上定义新方法。
function Human(name){
this.name = name
}
Human.prototype.run = function(){return undefined}
function Man(name){
Human.call(this, name)
this.gender = '男'
}
//Man.prototype.__proto__==Human.prototype
//IE不支持,通过中间函数桥接完成
var f = function(){}
f.prototype = Human.prototype
Man.prototype = new f()
复制代码
ES6 使用 class extends 关键字继承
class Human{
constructor(name){
this.name = name
}
run(){
console.log("我叫"+this.name+",我在跑")
return undefined
}
}
class Man extends Human{
constructor(arguments){
super(arguments)
this.gender = '男'
}
fight(){
console.log('糊你熊脸')
}
}
复制代码
上面两个方法的优劣
class 与extends 关键字继承更为简单,但兼容性较差