ES6 и не только [Кайл Симпсон] (pdf) читать постранично, страница - 26

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

возникавших до ES6 пользовательских «подклассов»
ошибок такого поведения не наблюдалось, что несколько ограничивало их применимость.
Тут нам поможет ES6:
class Oops extends Error {
constructor(reason) {
this.oops = reason;
}
}
// позднее:
var ouch = new Oops( "I messed up!" );
throw ouch;

Пользовательский объект ouch в приведенном фрагменте будет
вести себя как настоящий объект ошибки, в том числе и захватывать
информацию из стека. Это существенное улучшение!

Свойство new.target
В ES6 появилась новая концепция, называемая метасвойством
(meta property). Она имеет форму new.target и подробно будет
рассматриваться в главе 7.

Классы

197

Добавление к ключевому слову точки ., да и само имя свойства
выглядят странно для JS.
Свойство new.target представляет собой новое «магическое» значение, доступное во всех функциях, хотя в обычных функциях оно
всегда равняется undefined. В любом конструкторе new.target всегда
будет указывать на конструктор, непосредственно вызвавший оператор new, даже если тот располагается в параллельном классе и был
делегирован через вызов super(..) из дочернего конструктора.
Рассмотрим пример:
class Foo {
constructor() {
console.log( "Foo: ", new.target.name );
}
}
class Bar extends Foo {
constructor() {
super();
console.log( "Bar: ", new.target.name );
}
baz() {
console.log( "baz: ", new.target );
}
}
var a = new Foo();
// Foo: Foo
var b = new Bar();
// Foo: Bar