TypeScript: Åtkomst till yttre "this" från literal getter
När man använder getters och setters i objektliteraler kan jag inte se ett enkelt sätt att komma åt den yttre "this"-scopen i Typescript. Tänk på följande:
class Report {
stuff: any[];
options = {
length: 10,
get maxLength() { return REPORT.stuff.length }
}
}
Där REPORT vill vara en referens till instansen av Report-objektet. Jag inser att jag kan lösa detta genom att sätta alternativ inom konstruktorn och använda en var REPORT=this eller liknande, men det verkar inelegant. Finns det ett sätt att göra detta mer snyggt?
Svar #1
Jag inser att jag kan lösa detta genom att ställa in alternativ inom konstruktorn och använda en var REPORT=this eller liknande, men det verkar otympligt
Istället för att ställa in alternativ i konstruktorn kan du dra nytta av det faktum att options *definieras i konstruktorn. Därför, lagra this i options:
class Report {
stuff: any[] = [];
options = {
_report: this,
length: 10,
get maxLength() { return (this._report as Report).stuff.length }
}
}
let foo = new Report();
foo.stuff = [1,2];
console.log(foo.options.maxLength); // 2
Svar #2
Du kan dra nytta av this-bindningen i lambdauttryck.
class Report {
stuff: any[];
options = {
length: 10,
maxLength: () => this.stuff.length
}
}
kompileras till
var Report = (function () {
function Report() {
var _this = this;
this.options = {
length: 10,
maxLength: function () { return _this.stuff.length; }
};
}
return Report;
})();
Redigera: Detta gör en funktion istället för en getter som du hade från början. Jag antog att det var ett skrivfel, tills just nu, när jag precis lärde mig att det är giltig JavaScript.
