ES5:通过原型链实现继承
通过原型实现继承,最简单的方法就是
SubClass.Prototype = new SuperClass()
但是这种方式有一个弊端,就是会丢失SubClass.Prototype上的原有constructor
constructor 属性是创建实例对象的函数的引用,我们可以通过constructor属性验证实例的原始属性
通过Subclass.Prototype.constructor = SubClass可以解决,但是这样也有问题
这样会导致Subclass.Prototype上所有属性都是可枚举的,包括constructor
所以要用Object.defineProperties()进一步优化
操作如下:
Object.defineProperty(SubClass.Prototype,"constructor",{
enumerable: false,
value: SubClass,
writable: true
})
配置对象的属性api Object.defineProperty()参考
https://dwz.cn/hAGc8tuM
ES6:通过class实现继承
class Person(){
constructor(name){
this.name = name
}
}
class Ninja extends Person{
// 构造函数
constructor(name, weapon){
super(name)
this.weapon = weapon
}
// 每个实例均可访问的方法
swingSword(){
return true
}
// 静态方法
static compare(ninja1, ninja2){
}
}