Zajrzałem w to głębiej i bawiłem się maszynopisem. Deklarowałem dwie klasy jeden z geterem i drugą z metodą get, jak opisano w twoich pytaniach.
Pozwala zobaczyć, jak to wygląda:
W pierwszym przykładzie zadeklarowaliśmy metodę uzyskiwania wartości nieruchomości w następujący sposób:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
getGreeting() {
return this.greeting;
}
}
które po przeliczeniu na javascript wygląda:
var Greeter = (function() {
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.getGreeting = function() {
return this.greeting;
};
return Greeter;
}());
i dotyczące drugi przykład gdzie zadeklarowaliśmy getter w następujący sposób:
class GetterGreeter {
_greeting: string;
constructor(message: string) {
this._greeting = message;
}
get greeting() {
return this._greeting;
}
}
Które po przetłumaczeniu wygląda tak:
var GetterGreeter = (function() {
function GetterGreeter(message) {
this._greeting = message;
}
Object.defineProperty(GetterGreeter.prototype, "greeting", {
get: function() {
return this._greeting;
},
enumerable: true,
configurable: true
});
return GetterGreeter;
}());
(Można grać z deklaracją i tłumaczenia do JavaScript here)
Jak widać z metody GET (jak w pierwszym przykładzie) metoda jest zadeklarowana na prototypie, a w twoim drugim przykładzie używając maszynopisu wzoru gettera używa api defineProperty.
W obu przypadkach wywołujemy metodę, a kątowa wywoła metodę podczas jej wykrywania, aby zidentyfikować zmiany i ponownie renderować.
Jak widzę, jest to tylko cukier syntaktyczny dla tego samego podejścia i nie widzę korzyści z wydajności dla jednej z metod.
Myślę, że to tylko cukier syntaktyczny dla tego samego. Czy widziałeś gdzieś, że jest jakaś korzyść z jednego z nich? – galvan
Nie, to jest moje pytanie, próbuję zrozumieć, czy jest coś innego. – ng2user