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

Можете ли вы вызвать конструктор класса без «нового» в ES6?

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

 Can You Call a Class Constructor Without \'new\' in ES6?

Вызов конструктора класса без нового ключевого слова в ES6

Учитывая определение класса:

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

Невозможно напрямую вызвать конструктор класса без ключевого слова new. Это связано с тем, что классы в ES6 по своей сути имеют функцию-конструктор, которая вызывается при вызове класса.

Вызов класса без новых результатов приводит к ошибке:

Cannot call a class as a function

Это сообщение об ошибке ясно указывает на то, что конструктор класса можно вызвать только с помощью нового оператора, который необходим для создания нового экземпляра класса.

Чтобы Чтобы преодолеть это ограничение, рассмотрите следующие подходы:

  • Вместо этого используйте обычную функцию:
function Foo(x) {
  this.x = x;
  this.hello = function() {
    return `hello ${this.x}`;
  }
}
  • Всегда вызывайте класс с помощью new:
(new Foo("world")).hello(); // "hello world"
  • Оберните класс в функцию и вызовите с помощью new:
var FooWrapper = function(...args) { return new Foo(...args) };
FooWrapper("world").hello(); // "hello world"
Последний учебник Более>

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

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

Copyright© 2022 湘ICP备2022001581号-3