Для обычных функций значение this
определяется тем, как вызывается функция. Поскольку вы сохранили formatAddress в переменной, а затем вызвали его с кодом formatAddress()
, он вызывается без какого-либо контекста. В результате, this
по умолчанию не определено (или в нестрогом режиме для объекта окна).
Один из вариантов - изменить способ его вызова. Если вы сохраните пользовательский объект и затем вызовете user.formatAddress()
, тогда this
будет установлен равным пользователю:
const user = useSelector((state: RootState) => state.users[userIndex]);
console.log(user.formatAddress());
В качестве альтернативы, вы можете привязать formatAddress к пользователю. Это создает новую функцию, значение которой this
постоянно запекается в:
constructor(userDTO: UserResponseDTO) {
this.id = userDTO.id
// ... etc
this.company = userDTO.company
this.formatAddress = this.formatAddress.bind(this);
}
Или используйте функцию стрелки, поскольку они получают свои this
из того, что this
было равно, когда функция стрелки был создан. Поскольку вы используете машинопись, вы можете использовать следующий синтаксис:
export class User {
// ... stuff omitted
constructor(userDTO: UserResponseDTO) {
//...
}
formatAddress = () => {
return `${this.address.street}. ${this.address.city} - ${this.address.zipcode}`
}
}