typescript - Finnes det en måte å bruke det samme navnet for både en setter-metode og en klasseegenskap?


I en TypeScript-klasse, finnes det en måte å bruke det samme navnet både for en settermethode og klasseegenskap? Dette vil gjøre det mer konsistent å sette og hente verdier. For eksempel:

myClass.myValue = "Hello"; //Setter.
var myValue = myClass.myValue; //Getter.

class myClass {
   myValue: string;

   myValue(inArg: string) {
      alert("inArg: " + inArg);
   }
}

Svar #1

Nei, og det har å gjøre med hvordan klassen opprettes i JavaScript:

var MyClass = (function () {
    function MyClass() {
        this.myValue = "string";
    }
    MyClass.prototype.myValue = function (inArg) {
        alert("inArg: " + inArg);
    };
    return MyClass;
}());

Når du da gjør:

let obj = new MyClass();

Du oppretter en instans av klassen som har alt som eksisterer i prototypen, inkludert myValue-metoden, men deretter i konstruktøren overstyrer du egenskapen myValue med en streng.

Det er likt som å gjøre dette:

class MyClass {
    myValue(inArg: string) {
      alert("inArg: " + inArg);
   }
}

let obj = new MyClass();
obj.myValue = "a string";

Den eneste forskjellen er at i dette eksemplet overstyrer du myValue bare for obj, men ikke andre instanser av MyClass, mens i ditt eksempel vil det gjøre det for alle instanser fordi det er i konstruktøren.

Relaterte artikler