2016-06-12 5 views
1

typescript 및 fat 화살표 연산자에서 this 키워드를 읽는 동안 클래스의 멤버 메서드를 선언하는 가장 좋은 방법이 무엇인지 궁금하게 만드는 예제가 나타났습니다.Typescript 멤버 함수 모범 사례

class MyClass { 
    private status = "blah"; 

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

그리고이 :

class MyClass { 
    private status = "blah"; 

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

본질적으로이 차이가 있습니까?

+0

그것은 모두가이 질문에 내려 온다 : 당신이 함수를 포함하거나 방법을 원하는 않는 속성을 원하는가? –

답변

2

당신은 정상적인 기능을 선언하는 경우 :

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

그것을 : 당신이 지방 화살표 함수를 선언하는 경우, 그러나

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

:

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

이 그것은 프로토 타입에 선언됩니다 클래스의 모든 인스턴스에서 선언되고이 클래스에 바인딩됩니다.

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

지금이 고려 :

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

이제 훨씬 더 명확 해졌습니다. 감사합니다! – Seb