我深入瞭解這一點,並與打字遊戲場一起玩。 我用getter聲明瞭兩個類,用你的問題中描述的get方法聲明瞭第二個類。
讓我們來看看它的樣子:
在第一個例子中,我們宣佈了通過以下方式獲取屬性值的方法:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
getGreeting() {
return this.greeting;
}
}
哪種翻譯成JavaScript它看起來像後:
var Greeter = (function() {
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.getGreeting = function() {
return this.greeting;
};
return Greeter;
}());
和關於我們宣佈以下列方式吸氣第二個例子:
class GetterGreeter {
_greeting: string;
constructor(message: string) {
this._greeting = message;
}
get greeting() {
return this._greeting;
}
}
哪種翻譯後的樣子:
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;
}());
(您可以通過聲明並翻譯成JavaScript here打)你可以用get方法看到(你的第一個例子)該方法在原型上聲明,在第二個示例中使用getter模式typescript使用defineProperty api。
在這兩種情況下,我們都調用一個方法,並且角度也會在其更改檢測期間調用一個方法來識別更改並重新呈現。
正如我所看到的,這只是一種語法糖,對於相同的方法,我沒有看到任何性能方面的好處。
我認爲這僅僅是同一事物的一個語法糖。你有沒有看到使用其中之一的好處? – galvan
不,這是我的問題,我想了解是否有其他問題。 – ng2user