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

Как я могу вызвать конструктор класса ES6 без ключевого слова «new»?

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

How Can I Call an ES6 Class Constructor Without the \

Вызов конструкторов классов ES6 без «new»

В ES6 классы являются синтаксическим сахаром для функций конструктора. Когда класс вызывается без ключевого слова new, он не создает новый экземпляр класса. Вместо этого он напрямую вызывает функцию-конструктор класса.

Рассмотрим следующий класс:

class Foo {
  constructor(x) {
    if (!(this instanceof Foo)) return new Foo(x);
    this.x = x;
  }
  hello() {
    return `hello ${this.x}`;
  }
}

Если мы попытаемся вызвать этот класс без ключевого слова new, мы получим ошибку:

Cannot call a class as a function

Это связано с тем, что конструкторы классов разработаны для создания новых экземпляров класса. Их вызов без оператора new эквивалентен вызову обычной функции.

Чтобы разрешить вызов конструктора класса без ключевого слова new, мы можем использовать комбинацию функции-конструктора и функции стрелки следующим образом:

class Foo {
  constructor(x) {
    if (!(this instanceof Foo)) return new Foo(x);
    this.x = x;
  }
  hello() {
    return `hello ${this.x}`;
  }
}

const FooWithoutNew = () => new Foo(...arguments);

Теперь мы можем вызвать конструктор класса без ключевого слова new, используя FooWithoutNew:

FooWithoutNew("world").hello(); // "hello world"

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

В общем, для ясности и последовательности рекомендуется всегда вызывать конструкторы классов с ключевым словом new.

Последний учебник Более>

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

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

Copyright© 2022 湘ICP备2022001581号-3