@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);
    }
}
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
@Cruper Автор вопроса
web-падаван
Смена контекста внутри метода класса не работает. (Особенности компиляции typescript в js, как я понял).
Однако сменить контекст, когда вызывается метод класса возможно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 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';
    }
}
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы