2016-03-18 4 views
1

У меня есть приватный переменный, которую я получить/установить с помощью машинописи геттера/сеттера, например:Передайте ссылку на сеттер

private _x:number; 

set x(value:number){ 
    _x = value; 
} 

get x():number{ 
    return _x; 
} 

Можно ли передать ссылку на этот сеттер, чтобы я мог использовать его позже? Если я попытаюсь передать object.x, тогда он, конечно, получит значение _x.

Я знаю, что могу передать строку «x», а затем использовать ее как obj ["x"], но это не будет хорошей строго типизированной практикой, плюс, мне тоже нужно будет передать объект ,

ответ

2

Вы можете получить ссылку на функцию сеттер из дескриптора свойств с помощью Object.getOwnPropertyDescriptor() на prototype, bind его к экземпляру, а затем вызвать его:

let setX:(x:number) => void = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(thing), "x").set.bind(thing); 

setX(123); 

Но это довольно много гимнастики. То, что я бы просто написать обертку arrow function:

let setX = (x:number):void => { thing.x = x }; 

setX(123); 

Это просто и дает INFERRED типобезопасность. (По какой-то причине для компилятора требуется { }, хотя он испускает один и тот же JS в любом случае.)

Example in the playground.

Смежные вопросы