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

js的继承实现(ES5,ES6)

2019-04-20 18:53 323 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/sinat_40865038/article/details/89421670

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){

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