У меня есть следующий случай, я хочу использовать декоратор для базового изменения функции get, цель в том, чтобы функция get возвращала, была установлена конкретная переменная или нет.
У меня есть код, необходимый для этого, но я не совсем понимаю, как работают декораторы. Я создал следующий пример на машинописной площадке: здесь
function PropertyDecorator(
target: Object, // The prototype of the class
propertyKey: string | symbol // The name of the property
) {
let value = false;
console.log('hit');
return {
get: () => {
return value;
},
set: (val: string) => {
value = val.toLowerCase() !== 'false';
},
enumerable: true,
configurable: true
};
}
class PropertyDecoratorExample {
@PropertyDecorator
name: string;
@PropertyDecorator
name2: string;
constructor() {
console.log('New instance');
console.log(this.name, 'should be false');
this.name = 'hey';
console.log(this.name, 'should be true');
console.log(this.name2, 'should be false');
}
}
new PropertyDecoratorExample();
new PropertyDecoratorExample();
имеет, как вы можете видеть из примера, первый экземпляр объекта правильный (проверьте консоль)
хотя второй экземпляр почему-то сохраняет тот же контекст, что и первый, есть идеи, почему? или что тут не так?