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.