2017-03-03 5 views
0

Ich würde gerne wissen, ob ich das "this" -Schlüsselwort jedes Mal verwenden muss, wenn ich auf eine Instanzvariable verweise. Aus Java kommend benutze ich "this" nur, wenn es eine andere Variable mit demselben Namen aus einem anderen Bereich gibt (zB. This.arg = arg). Aber in allen Tutorials für Typescript scheint es, dass Leute "dieses" jedes Mal verwenden, wenn auf eine Instanzvariable (public studentName: string;) verwiesen wird. Also, wenn ich ohne Argumente mit dem gleichen Namen in einer einfachen Methode arbeiten muß, muß ich ernsthaft tun:Angular2, Typescript - Klassenvariablen und Verwendung von "this"

let nameOfTheStudent=this.studentName; 

zuerst, wenn ich will nicht verwirrend „diese“ die ganze Zeit schreiben?

+0

Wenn die Variable global ist, müssen Sie das Schlüsselwort 'this' verwenden. Sie können 'let' verwenden, aber nur für Variablen, die innerhalb von Funktionen deklariert sind (lokale Variablen). –

+1

[this] (https://github.com/Microsoft/TypeScript/wiki/this'-in-TypeScript) wird helfen, 'this' im Kontext von JavaScript und Typoskript zu verstehen –

Antwort

3

Ja, wenn Sie auf ein Klassenfeld zugreifen möchten, müssen Sie this.field verwenden. Das ist eine wirklich kurze und langweilige Antwort, also hier ist ein Zusammenhang.

Bei JavaScript/TypeScript-Klassen ist zu beachten, dass es sich nur um Syntaxzucker für das vorhandene prototypbasierte Objektsystem handelt. Zum Beispiel sind diese beiden Teile des Codes funktional äquivalent:

// ===== Class syntax ===== 

class MyClass { 
    myField: string; 

    constructor() { 
     this.myField = "Hello, world!"; 
    } 

    myMethod() { 
     return this.myField; 
    } 
} 

let myInstance = new MyClass(); 

// ===== Prototype syntax ===== 

function MyClass() { 
    this.myField = "Hello, world!"; 
} 

MyClass.prototype.myMethod = function() { 
    return this.myField; 
}; 

let myInstance = new MyClass(); 

In der Tat, wenn man sich die JavaScript vom Typoskript Compiler ausgegeben schauen, was das letztgenannte Beispiel ist wahrscheinlich werden Sie (mehr oder weniger) zu sehen. In der Realität, obwohl Sie Klassenfelder in Ihrem Code verwenden können, hat JavaScript nicht wirklich ein Konzept von ihnen - Sie bekommen nur Eigenschaften für eine Konstruktorfunktion und setzen diese.

Anstatt zu machen Klassen haben verschiedene syntaktische Regeln zu normalen Funktionen, die Spezifikation wurde entworfen, um die Zuordnung so konsistent mit den bestehenden Regeln wie möglich zu halten, und halten Sie die Klassensyntax minimal. Aus diesem Grund müssen Sie im Gegensatz zu Java oder C# this angeben.

Verwandte Themen