Nyckelordet this i TypeScript. Är det ett fel?
Jag har en medlemsfunktion render(). Denna funktion anropar en annan medlem i klassen add(any). Detta är utdraget.
render(){
collection.each(this.add);
}
Om jag använder nyckelordet "this" i add, är typen window. Jag skulle förvänta mig att det är instansen av medlemsklassen.
I en konstruktor, medlemsfunktion eller medlemsåtkomst är this av klassinstanstypen för den omgivande klassen.
Svar #1
Som JcFx påpekar, är din this-omfång olika inom each-callbacken.
Men om du använder en 'fat arrow'-anonym funktion, kommer den att använda lexikala scoping-regler för this så att du får det du letar efter:
render(){
collection.each((x) => this.add(x));
}
Kompileras till följande JavaScript:
X.prototype.render = function () {
var _this = this;
collection.each(function (x) {
return _this.add(x);
});
}
Ett annat alternativ är att uttryckligen bind anropet add till det önskade this:
render(){
collection.each(this.add.bind(this));
}
Svar #2
Jag tror inte att det är ett fel.
Du är inte längre inom omfattningen av render()-funktionen, utan istället inom omfattningen av each().
Prova detta:
render(){
var that = this;
collection.each(that.add);
}
