2016-06-12 13 views
1

Beim Lesen über das This-Schlüsselwort in Typoskript und dem Fettpfeil-Operator stieß ich auf ein Beispiel, das mich fragt, was der beste Weg ist, eine Member-Methode in einer Klasse zu deklarieren?Typescript Member Function Best Practice

Im Wesentlichen gibt es einen Unterschied zwischen diesen:

class MyClass { 
    private status = "blah"; 

    public run =() => { // <-- note syntax here 
     alert(this.status); 
    } 
} 

Und:

class MyClass { 
    private status = "blah"; 

    public run() { 
     alert(this.status); 
    } 
} 

?

+0

Es kommt alles auf diese Frage: Wollen Sie eine Eigenschaft, die eine Funktion enthält, oder wollen Sie eine Methode? –

Antwort

2

Wenn Sie deklarieren eine normale Funktion:

public run() { /*...*/ } 

Es wird am Prototyp deklariert werden:

MyClass.prototype.run = function() { /*...*/ }; 

Wenn Sie jedoch einen fetten Pfeil Funktion erklären:

public run2 =() => { /*...*/ } 

Es wird für jede Instanz Ihrer Klasse deklariert UND ist an diese Klasse gebunden.

function MyClass() { 
    this.run2 = function() { /*...*/ }; 
} 

Nun ist diese betrachten:

class MyClass { 
    private status = "blah"; 

    public run() { 
     alert(this.status); 
    } 
    public run2 =() => { 
     alert(this.status); 
    } 
} 
var obj = new MyClass(); 
obj.run(); // alerts 'blah' 
obj.run2(); // alerts 'blah' 
var p = { run: obj.run, run2: obj.run2 }; 
p.run(); // alerts 'undefined' 
p.run2(); // alerts 'blah' 
+0

Es ist jetzt viel klarer, danke! – Seb