есть ли смысл модифицировать цепочку прототипов Function Instance? - PullRequest
0 голосов
/ 10 ноября 2018

как 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

и я знаю, что классы в 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

поэтому мои вопросы:

  1. есть ли способ в ES5 переназначить Function Instance свойство [[Prototype]], которое делает наследование точно равным ES2015 (как вы знаете, Object.setPrototypeOf() было введено в ES2015)
  2. имеет ли какое-либо значение модификация цепочки прототипов функционального экземпляра (конструктора)?
...