내 동료와 나는이 토론을 여러 번했다. 클래스 메소드를 정의하는 두 가지 방법이 있습니다. 첫 번째 방법은 함수 선언 함께 :클래스 메서드에 대한 함수 선언 또는 표현식?
class Action {
public execute(): void {
this.doSomething();
}
...
}
기능 선언을 쉽게 읽을 경향이있다. Action
의 인스턴스마다 하나의 함수 객체 만 사용되므로 더 친숙합니다.
번째 함수 식 함께 :
class Action {
public execute:() => void =() => {
this.doSomething();
};
...
}
함수 표현식 개 입력 (특히 유형 정의)와, 읽기 어렵게하고, Action
의 각 인스턴스에 대한 새로운 기능 오브젝트를 생성 할 필요. 그리고 많은 양의 객체를 생성한다면 그것은 나쁘다. 그러나
, 함수 표현식은 하나의 작은 이익을 가지고 : 함수 표현식이 예상대로 작동으로 선언
var instance = new Action();
setTimeout(instance.execute);
하는 방법에있어서, 그들은 상관없이 그들을 호출 자합니다 (Action
예를 IE) this
의 컨텍스트를 보존 케이스. 함수 선언은 비참하게 실패하지만, 쉽게 대신이 일을 해결할 수 있습니다 : 그래서
var instance = new Action();
setTimeout(() => instance.execute());
// or
setTimeout(instance.execute.bind(instance));
, 하나는 다른 통해 더 나은 연습 간주됩니다, 또는 우대 /이 순전히 상황입니까?
우수. 상속/프로토 타입 시나리오도 고려하지 않았습니다. 메소드가 이벤트 핸들러로 사용될지라도, 위에서 설명한대로 익명 함수 랩퍼를 사용하여 대부분의 상황을 완화 할 수 있다고 생각합니다. – Craxal
@Craxal 익명의 함수 대신에'bind' 함수를 사용하는 편이 낫지 만 어느 쪽의 경우 든 엉성한 것이 아닙니다. –
'bind '를 선호한다면 어떤 이점이 있습니까? 명시 적으로 인수를 처리하고 전달하는 것에 대해 걱정할 필요가 없다고 가정합니다. – Craxal