@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);
    }
}
  • Вопрос задан
  • 47 просмотров
Решения вопроса 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';
    }
}
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
EXANTE Москва
от 150 000 руб.
Click Санкт-Петербург
от 130 000 до 160 000 руб.
26 сент. 2018, в 11:41
2200 руб./за проект
26 сент. 2018, в 11:04
500000 руб./за проект