关于es6类的继承是否可以由以下es5所实现的?

来源:5-9 【TS继承准备】寄生组合继承实现方式【最佳继承模式】-1

zhangkaili

2021-12-05

class A {

}

class B extends A {

}
// 下面构造函数是不是可以简单理解为 类继承的实现

// B.proto === A;
function A1() { }

function B1() {
A1.apply(this,arguments)
}

// B.prototype.proto === A.prototype;
B1.prototype = new A1()

// proto==> 实则为 前后双下划线proto

写回答

1回答

keviny79

2021-12-05

 问题说明:使用__proto__ 建立继承带来不好的问题:

1. 原因1:修改原型或对象的原型链属性__proto__(就是[[Prototype]])是一个不好的编码习惯

   它改变了原型链的链级指向关系,破坏了原型链的稳定性,导致原型链上依赖的方法和属性都会受到影响

   举个例子

例子:

let son = new Son("爱好篮球", "男");// S100

Son.prototype.__proto__ = Parent.prototype// S101

Son.prototype.constructor = Son;// 让Son类的对象或函数原型.prototype指向的原型对象空间【new Parent()对象空间】有一个constructor属性

console.log("Son.prototype来看看:", Son.prototype);

console.log("abc..哦哦");

son.eat();// S102 调用 Parent原型上eat()方法成功


问题解说:

  我们并不希望S100行创建的son对象变量在S102处能调用 Parent.prototype 上的方法,因为它是我们 S101 行 改变指向之前创建的son对象,但是实际能调用,  这就是修改__proto__代码带来的问题!

0
4
keviny79
回复
zhangkaili
不是这样理解, 这样理解:是把任意两个定义好的函数之间通过 __proto__来建立继承关系的这种做法叫做通过修改原型链来建立继承关系,这种做法会破坏原型链的稳定性,导致原型链上依赖的方法和属性都会受到影响, 所以加入一个middle 来解决这个问题。
2021-12-07
共4条回复

晋级TypeScript高手,成为抢手的前端开发人才

轻松驾驭 TypeScript 高级用法, 突破前端成长瓶颈

871 学习 · 425 问题

查看课程