alex4answ
@alex4answ

Позднее статическое связывание, как использовать переопределенное св-во в родительском классе?

Делаю библиотеку, нужно что-то типа позднего статического связывания, не совсем понимаю как это сделать в ts.

Есть класс, у него статические поля/методы, он будет наследоваться, и его методы должны работать с статическими св-вами/методами наследника, как?
typescript

class A {
  static text: string = 'A class';

  static getA() {
    return A.text; // что-то типа static.text
  }
}

class B extends A {
  static text: string = 'B class';
}

console.log(B.getA()); // A class, нужно B class


Я понимаю что никакого позднего стат связывания в js/ts нет и тп и тд.
НО как решать подобные задачи?

Не хотелось бы переопределять эти общие методы в каждом классе наследнике
  • Вопрос задан
  • 344 просмотра
Решения вопроса 1
MagnusDidNotBetray
@MagnusDidNotBetray
Самый елеустремленный человек
Это невероятно сложно, но всё же возможно.

class A {
  static text: string = 'A class';

  static getA() {
    return this.text; // что-то типа static.text
  }
}

class B extends A {
  static text: string = 'B class';
}

console.log(A.getA()); // A class
console.log(B.getA()); // B class
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Ron_Tayler
А вот пример позднего статического связывания из инстанса объекта с использованием Prototype.
class A {
    static MESSAGE = 'A class';

    getA() {
        return Object.getPrototypeOf(this).constructor.MESSAGE
    }
}

class B extends A {
    static MESSAGE = 'B class';
}

class C extends A {}
class D extends B {}

let a = new A
let b = new B
let c = new C
let d = new D

console.log(a.getA()); // A class
console.log(b.getA()); // B class
console.log(c.getA()); // A class
console.log(d.getA()); // B class
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы