使用JavaScript进行面向对象开发 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

直接继承成员的缺陷

右边的示例由于存在BUG而无法运行,这个BUG便是直接继承成员带来的。

很明显leader继承了worker并重写了worker中的startWork方法。修改的内容是,工头干活的时候,工人一起干活。

问题出在哪儿呢?

直接继承相当于两个人拿着同样的说明书,当其中任意一方修改了说明书以后,另一方也会按照新的说明书执行。 因此,worker中的startWork也出现了“下属工人一起干活”的行为,可是worker没有workers的成员,因此在var workerLength = this.workers.length;中会出现异常

所以直接继承原型不是一个合理的方式,因为直接继承并不是继承,而是直接引用,两者拥有相同的原型,一方的修改都会使另一方发生变化。