До классов ES6 функцию можно использовать в качестве конструктора:
function MyClass(a, b) {
}
Тогда следующий код эквивалентен классическому экземпляру (например, let thisObj = new MyClass("A", "B")
):
let thisObj = Object.create(MyClass.prototype)
// Here we know the `this` object before to call the constructor.
// Then, the constructor is called manually:
MyClass.call(thisObj, "A", "B")
... Этот метод был способом узнать объект this
перед вызовом конструктора.Но Function.prototype.call()
не работает с конструктором класса ES6.
С ES6 у нас есть Reflect.construct()
:
let thisObj = Reflect.construct(MyClass, "A", "B");
Но он не предоставляет способ вызвать конструктор послеобъект this
создан.
Возможно ли сделать это с классами ES6?
Мой сценарий использования
Мне нужно было бы сохранить эту функцию от ES5на ES6 для рамки.Платформа отвечает за создание компонентов (которые являются классами ES6).Компонент может создавать дочерние компоненты (в дереве компонентов здесь нет наследования) из своего конструктора.Затем дочерний компонент может запросить структуру, чтобы получить своего родителя от своего собственного конструктора.В этом случае у нас есть техническое ограничение, потому что у фреймворка все еще нет возвращаемого значения конструктора родительского компонента.Это регрессия по сравнению с (переносом) к ES5.