老生常谈 关于JavaScript的类的继承
程序员文章站
2022-06-29 21:15:10
其实最一开始学js的时候就看过继承的实现。当时只是去试着理解从书上看来的代码段而已。今天又重新思考了一下,感觉这是一个思维探索演进的结果。
继承,即复用。
如果抛开继承...
其实最一开始学js的时候就看过继承的实现。当时只是去试着理解从书上看来的代码段而已。今天又重新思考了一下,感觉这是一个思维探索演进的结果。
继承,即复用。
如果抛开继承的固有思想,让b复用a的成员,最简单粗暴的做法, b=a;
那么,问题来了: 对b的任何改动,就是对a的改动(同一个object嘛)。
好吧,那就拷贝一份,浅拷贝不够安全的话,就用深拷贝。
问题:代码是复用了,但内存浪费了(不管是变量还是方法,在js中都是对象)。
不拷贝,只读不写,就可以用js的原型,b.__proto__ = a。一般我们不直接更改__proto__,太暴力了,js中提供了一个method可以比较“温和”地达到目的——object.create(b)。
这个方法可行,但这只是具体对象的复用模式,如果做到“利用constructorb创建的对象能复用constructora的对象的原型”呢?
答案是:将b看成是constructorb.prototype,将a看成constructora.prototype.
问题:
解决方法:
申明constructorb的时候,系统自动会让constructorb.prototype.constructor=constructorb; 在上面代码中为了复用constructora.prototype, 丢掉了constructor, 补上即可。
以上是最基本的继承,关于子类如何更通用地调用父类的构造函数及成员(如this._super),如何更通用地实现继承模式(如a=inheritfrom(b)),等等,不在本文范围^o^
以上就是小编为大家带来的老生常谈 关于javascript的类的继承全部内容了,希望大家多多支持~