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

JavaScript多种继承总结及constructor取值

2017-12-06 15:46 148 查看
以下个人观点,不足之处望能指正(具体源码请参考JavaScript高级程序设计_继承)

针对于实现自定义类型采用的继承方式

原型链继承

SubType.prototype = new SuperType()//赋值超类实例,子类存在共享引用类型数据的问题
var instance = new SubType()//不能向超类构造函数传参


借用构造函数继承

SuperType.call(this,"xxx")//解决了上述共享引用类型数据,不能传参的问题。但存在函数不能复用的问题,而且无法使用SuperType.prototype定义的方法


组合继承

同时使用SubType.prototype = new SuperType()
SuperType.call(this,"xxx")
var instance = new SubType()
是比较常用的继承方式,但存在调用了两次SuperType的构造函数的问题,同时,SubType.prototype中存在多余属性(寄生组合式继承相比)


针对于已有对象创建新对象的继承

原型式继承

ES5已实现(Object.creat())
类似原型链继承,存在同样的问题


寄生式继承

类似于借用构造函数继承,但用于已存在的对象


寄生组合式继承

SuperType.call(this,"xxx")+继承函数
和组合继承式继承最大的区别就是只调用了一次构造函数,并且子类原型上没有多余属性


注:个人感觉原型上的constructor属性类似于java中的getClass,用来判断实例化的是哪个对象,他的取值并不能影响实例化时调用的构造函数。同时,在ES6中已经实现class继承语法糖
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript 继承 函数