JS-функция, которая может быть вызвана только новым ключевым словом - PullRequest
0 голосов
/ 03 июля 2018

Можем ли мы создать функцию в javascript, которая может быть вызвана только новым ключевым словом? Кто-то спрашивает меня, как ввести такое ограничение в javascript и каковы способы использования.

Буду признателен, если кто-нибудь ответит и об использовании этого ограничения.

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Свойство new.target позволяет определить, была ли вызвана функция или конструктор с использованием оператора new:

function Foo() {
  if (!new.target) throw 'Foo() must be called with new';
}

try {
  Foo();
} catch(e) {
  console.log(e);
  // expected output: "Foo() must be called with new"
}

Это может быть полезно в следующих случаях:

  1. При вызове функции Foo() подразумевается, что будет создан новый экземпляр объекта, но с ключевым словом new - это явно. Как результат код лучше читать / использовать / поддерживать / и т.д.

  2. Когда вам нужно выполнить некоторые специфические вещи во время создания нового экземпляра объекта (только один раз и только во время создания).

  3. Когда вам нужно выполнить все 5 шагов , которые ключевое слово new выполняет под капотом, а какой простой вызов функции не будет выполняться.

0 голосов
/ 03 июля 2018

классы ES6 фактически special functions.

Классы требуют использования оператора new для создания нового экземпляра, так как такой вызов класса без оператора new приводит к ошибке, так как это требуется для конструктора класса для создания нового экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...