как 2ality сказано в ECMAScript 6,
подклассы выглядит следующим образом.
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
···
}
class ColorPoint extends Point {
constructor(x, y, color) {
super(x, y);
this.color = color;
}
···
}
let cp = new ColorPoint(25, 8, 'green');
Этот код создает следующие объекты.
![enter image description here](https://i.stack.imgur.com/8tNrF.jpg)
и я знаю, что классы в JavaScript являются синтаксическим сахаром по сравнению с наследованием на основе прототипов.
типичная реализация в простом старом JavaScript, как следует,
function Parent(name) {
this.name = name || 'parent'
}
function Child(name, age) {
Parent.call(this, (name || 'child'))
this.age = age || 0
}
Child.prototype = Object.create(Parent.prototype)
Child.prototype.constructor = Child
var c = new Child
но цепочки прототипов выглядят иначе, чем раньше, примерно так
![enter image description here](https://i.stack.imgur.com/8MyMi.png)
поэтому мои вопросы:
- есть ли способ в ES5 переназначить
Function Instance
свойство [[Prototype]]
, которое делает наследование точно равным ES2015 (как вы знаете, Object.setPrototypeOf()
было введено в ES2015)
- имеет ли какое-либо значение модификация цепочки прототипов функционального экземпляра (конструктора)?