javascript - Getter/Setter som funktion
Är det möjligt att skapa en egenskapsgetter/setter som en funktion?
Standard getter/setter fungerar på följande sätt:
class Test {
something: any;
get prop() {
return something;
}
set prop(value) {
something = value;
}
}
let instance = new Test();
instance.prop = 'Foo';
console.log(instance.prop); // = Foo
Jag skulle behöva följande:
let instance = new Test();
instance.prop('Bar') = 'Foo'; // access setter as a function of prop
console.log(instance.prop('Bar')); // = Foo
Ja, jag vet att det är okonventionell användning och ja, jag vet att jag skulle kunna implementera denna funktionalitet lite annorlunda. Jag är bara intresserad av om detta är möjligt i JS/TS/ES6.
Uppdatering
Det här är det närmaste jag kom:
class Test {
something: any;
prop(area /* my custom symbol type */) {
const obj: any = {};
Object.defineProperty(obj, 'value', {
// get child object of my complex object
get: () => this.something[area];
// replace part of my complex object
set: (value) => {
this.something = {...this.something, [area]: value}
}
});
}
}
let instance = new Test();
instance.prop('Bar').value = 'Foo';
console.log(instance.prop('Bar').value); // = Foo
Så kort sagt, jag skulle vilja bli av med value-suffixet om möjligt.
Svar #1
Som @deceze nämnde i den första kommentaren, är det inte möjligt att tilldela till ett funktionsanrop, så lösningen i uppdateringen är så bra som det blir.