@Cruper
web-падаван

Как изменить сеттер свойства у объекта в другой функции?

Как при необходимости модифицировать сеттер объекта, не изменяя его объявление, если
при использовании Object.defineProperty this указывает на объект, вызвавщий этот метод?
При попытке воспользоваться функцией Object.defineProperty.call(...), this все равно указывает на объект, вызвавший эту функцию.
Примерный кусок кода:
class Foo {
    public ModifySetter(obj: object, field: string): void {
        Object.defineProperty(obj, field, {
            set: (value) => {
                console.log(this); // объект класса Foo
                this[field] = value;
                // some actions
            },
            get: () => this[field]
        });
    }
}


const bar = (field) => {
       Object.defineProperty(this, field, {
            set: (value) => {
                console.log(this); // объект класса Foo
                this[field] = value;
                // some actions
            },
            get: () => this[field]
        });
}

class Foo {
    public ModifySetter(obj: object, field: string): void {
        bar.call(obj, field);
    }
}
  • Вопрос задан
  • 40 просмотров
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 1
  • @Coder321
    class Foo {
        constructor() {
            this._field = '';
        }
    
        set field(value) {
            this._field = value+='Foo';
        }
    
        get field() {
            return this._field;
        }
    }
    
    class MyFoo extends Foo {
        set field(value) {
            super.field = value;
            this._field += 'MyFoo';
        }
    }
    Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы