Расширение функции с помощью классов ES6
В ES6 можно расширять специальные объекты, позволяя наследовать объект Function. Хотя такие объекты можно вызывать как функции, реализация логики для этого вызова может быть сложной задачей.
Передача данных экземпляра в вызов функции
При вызове класса как функции , это относится к объекту окна. Для доступа к данным экземпляра доступны два подхода:
class Smth extends Function { constructor(x) { super("return " JSON.stringify(x) ";"); } }
class Smth extends Function { constructor(x) { function smth() { return x; }; Object.setPrototypeOf(smth, Smth.prototype); return smth; } }
Абстрагирование расширения функции
Более общий подход заключается в создании класса ExtensibleFunction, который обрабатывает расширение:
class ExtensibleFunction extends Function { constructor(f) { return Object.setPrototypeOf(f, new.target.prototype); } }
Этот класс затем можно использовать для расширения определенных классов:
class Smth extends ExtensibleFunction { constructor(x) { super(() => { return x; }); // closure } }
Подводя итог, можно сказать, что расширение Function с помощью классов ES6 позволяет наследовать поведение функции при настройке логики вызова. Для предоставления доступа к данным экземпляра при вызове расширенной функции можно использовать разные подходы.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3