Я просто экспериментировал с декораторами свойств Typescript. Но я не мог понять поведение следующего кода:
function dec(hasRole: boolean) {
return function (target: any, propertyName: string) {
let val = target[propertyName];
Object.defineProperty(target, propertyName, {
get() { return val; },
set(value) { val = hasRole; }
});
}
}
class Hey {
age: number;
@dec(true)
hasRole: boolean = false;
constructor(age: number) {
this.age = age;
}
}
let ob = new Hey(22);
console.log(ob);
// Фактический результат:
age: 22
hasRole: true
__proto__:
constructor: class Hey
hasRole: true
get hasRole: ƒ get()
set hasRole: ƒ set(value)
__proto__: Object
Результат, который я ожидал, был: 1. OwnProperty -> hasRole = false 2. Свойство прототипа -> hasRole = true. В качестве 'target' в аргументе декоратора предоставляет функцию конструктора для stati c членов или прототипа класса для элементов экземпляра.
Может ли кто-нибудь объяснить мне эту функцию?