Вот код, где я теряю контекст при использовании оператора спреда.Почему я теряю контекст в этом коде?
Посмотрите на функцию «декоратор». Линия, когда я теряю контекст отмечен «ERROR»
/** MethodDecorator example */
class Account {
public firstName: string;
public lastName: string;
public constructor(firstName: string, lastName: string) {
this.firstName = firstName;
this.lastName = lastName;
}
@decorator
public sayMessage(msg: string): string {
return `${this.firstName} ${this.lastName}: ${msg}`
}
}
function decorator(target: any, key: string, desc: any): any {
let originDesc = desc.value;
desc.value = function(...args: any[]): any {
return originDesc(...args); // ==> ERROR: context lost
//return originDesc.apply(this, arguments); // ==> all OK
};
return desc;
}
let persone = new Account('John', 'Smith');
let message = persone.sayMessage('Hello world!');
console.log(message); // ==> undefined undefined: Hello world!
Насколько я понимаю originDesc(...args);
равен originDesc.apply(this, arguments);
так почему мой контекст потерял?