#typescript
#typescript
Вопрос:
В чем может быть проблема с получением этой ошибки? Я пытаюсь получить доступ к защищенному полю из расширенного класса, используя статический метод.
class TEST {
name: string;
protected reter: string = 'show retry';
constructor(name: string, public age: number) {
this.name = name;
}
}
class TESTING extends TEST {
constructor(public name:string, public age:number) {
super('sd', 12);
this.name = 'indraraj'
}
static getReter() {
return this.reter;
}
}
let test = new TESTING('indra', 12);
console.log(TESTING.getReter)
console.log(test)
Ответ №1:
Потому что getReter()
это статический метод.
Это означает, что к нему обращается конструктор класса ( i.e TESTING.getReter()
), а не экземпляр, следовательно — не знает о this
, что является ссылкой на экземпляр класса, а не на сам конструктор класса.
удалите static
обозначение, и у вас будет доступ.
Для получения дополнительной информации следуйте этому сообщению: https://www.typescriptlang.org/docs/handbook/classes.html#static-properties
Комментарии:
1. -_- мое плохое спасибо @Sillicakes
2. @silicakes есть ли способ получить доступ к свойствам класса внутри статического метода?
3. Вы можете, если сохраните глобальную ссылку для всех экземпляров снаружи , а затем используете статический метод для обхода и нахождения искомого экземпляра.
4. Представьте, что у вас есть несколько экземпляров с разными значениями и вы используете функцию поиска, чтобы найти тот, который вам нужен. Простой реализацией было бы передавать каждый экземпляр статическому ключу в построителе классов после каждого создания экземпляра.