«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как классы ES6 можно использовать для расширения функций и доступа к данным экземпляра?

Как классы ES6 можно использовать для расширения функций и доступа к данным экземпляра?

Опубликовано 12 ноября 2024 г.
Просматривать:687

How can ES6 Classes be Used to Extend Functions and Access Instance Data?

Расширение функции с помощью классов ES6

В ES6 можно расширять специальные объекты, позволяя наследовать объект Function. Хотя такие объекты можно вызывать как функции, реализация логики для этого вызова может быть сложной задачей.

Передача данных экземпляра в вызов функции

При вызове класса как функции , это относится к объекту окна. Для доступа к данным экземпляра доступны два подхода:

  1. Жесткое кодирование: Заставьте супервызов ожидать строку кода, содержащую данные экземпляра.
class Smth extends Function {
  constructor(x) {
    super("return "   JSON.stringify(x)   ";");
  }
}
  1. Использование замыкания: Возвращает функцию замыкания, которая обращается к переменным экземпляра.
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 позволяет наследовать поведение функции при настройке логики вызова. Для предоставления доступа к данным экземпляра при вызове расширенной функции можно использовать разные подходы.

Заявление о выпуске Эта статья перепечатана по адресу: 1729462035. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3