Comments 5
А я в упор не понимаю этой истерии с запретом доступа к this до вызова super().
Всегда можно налететь на такой кейс
class A {
constructor(param: string) {
this.a = param;
this.test();
}
public a : string;
public test() {
console.log(this.a)
}
}
class B extends A {
constructor(param1: string, param2:string) {
super(param1)
this.b = param2;
}
public b : string;
public test() {
console.log(this.a + ' ' + this.b);
}
}
new B('foo', 'bar'); // "foo undefined"
При этом если заткнуть тайпскрипт варнинг и таргетиться в es5 всё будет прекрасно работать. Нет никакого технического ограничения почему нужно это запрещать. Имхо это работа линтера и детект такого кода должен быть исключительно опционален. И я опечален тем что такие искуственные и неоднозначные ограничения тащат в язык.
super надо вызывать по другой причине. До его вызова объекта просто не существует. А после вызова this будет указывать на созвращённый родительским конструктором объект.
class A {
constructor() {
return { foo: 'bar' }
}
}
class B extends A {
constructor() {
super()
console.log( this.foo ) // bar
}
}
Спасибо за пример, запамятовал что так можно. Хотя именно это в JS колассах я бы как раз запретил ибо всё ооп ломается и прототип кривой присваивается если руками возвращаешь другой объект, ибо прототип был прописан до того как отдать объект в конструктор
А после вызова this будет указывать на созвращённый родительским конструктором объект.
В этом весь JavaScript
Почему мы пишем super(props)?