关于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__代码带来的问题!
042021-12-07
相似问题