import inspect
def foo():
print(inspect.stack()[0][3])
Вы не создаете экземпляр пользователя.
Вот пример того, как это может быть реализовано:
export class User {
id?: number;
userName?: string;
knownAs?: string;
age?: number;
gender?: string;
created?: Date;
lastActive?: Date;
photoUrl?: string;
city?: string;
country?: string;
surname?: string;
givenname?: string;
constructor(args: User = {}) {
this.id = args.id;
this.userName = args.userName;
this.knownAs = args.knownAs;
this.age = args.age;
this.gender = args.gender;
this.created = args.created;
this.lastActive = args.lastActive;
this.photoUrl = args.photoUrl;
this.city = args.city;
this.country = args.country;
this.surname = args.surname;
this.givenname = args.givenname;
}
get fullName(): string {
return `${this.givenname} ${this.surname}`;
}
sayHello() {
console.log(`Hello, my name is ${this.surname} ${this.givenname}!`);
}
}
Используйте map для создания своего пользовательского экземпляра:
user: User;
this.userService.getUser(this.loggedUser.nameid)
.pipe(map((user: User) => new User(user)))
.subscribe((user: User) => {
this.user = user;
this.user.givenname = this.loggedUser.given_name;
this.user.surname = this.loggedUser.family_name;
console.log(this.user.fullName);
this.user.sayHello();
});
Попробуйте создать объект prototype
для User
следующим образом. User
вы получаете от службы не может быть prototype
объект и, следовательно, функции на нем недоступны.
user: User;
this.userService.getUser(this.loggedUser.nameid).subscribe((user: User) => {
this.user = Object.assign(new User, user) //-->notice the use of new here..
this.user.givenname = this.loggedUser.given_name;
this.user.surname = this.loggedUser.family_name;
console.log(this.user.fullName);
this.user.sayHello();
});
Обновление: классы JavaScript не совсем объектно-ориентированная модель. Согласно MDN:
классы JavaScript, представленные в ECMAScript 2015, в основном являются синтаксическим сахаром по сравнению с существующим наследованием JavaScript на основе прототипов. Синтаксис класса не вводит новую объектно-ориентированную модель наследования в JavaScript.
blockquote>Подробнее здесь
Также, как указано @theMayer в комментарии, сервис, который возвращает
user
, также может возвращать соответствующий объектUser
, который имеет прототип функции. Итак, это смещение кода для создания объекта от клиента к сервису. Мне нравится такой подход, просто потому, что это означает, что любой другой потребитель сервиса может использовать поведение (функции) объекта без необходимости дублировать (Object.assign
) объект.Итак, в
UserService.ts
(или там, где этоuserService
определено), что-то вроде:getUser(id: string):User { //existing logig return Object.assign(new User(), user)//--> there are other ways to create object too, this is just one way. }