2010-08-23 7 views
2

기존 JS와의 하위 호환을 시도하고 있습니다. 존재하지 않으면 메서드를 재정의해야합니다. 그렇지 않으면 기존 메서드를 반환합니다.메소드의 존재 여부 테스트

getDataSource 정의되지

은 무엇입니까 :이 라인은 "만일"(가)에서 오류를 반환 유지하지만

this.grid.getDataSource = function(){ 
    if (getDataSource == undefined) 
     return getStore(); 
    else 
     return getDataSource(); 
} 

을 : 여기

내가 지금까지 가지고있는 코드입니다 이것에 대해 가장 좋은 방법은?

답변

6

오류를 발생시키지 않고 작동해야합니다.

if (typeof getDataSource != "function") 
+0

나는 그것이'undefined' 없었던합니다 (else 절 참조) 테스트와 같은 테스트'(대해서 typeof getDataSource == "기능을")'원합니다는 * 실제로 * 나타내는 공개하지 않습니다 함수; 변수는 문자열이나 다른 프리미티브를 참조 할 수도 있습니다. –

+0

@ Marcel 물론, 맞습니다. 두 번째 대안 페이지 삭제하기. –

+0

아, 방금 당신을 보았습니다. (항상 대문자가 잘못되었습니다.) (http://area51.stackexchange.com/proposals/14873/english-german-translation). ;) –

1

당신이 () 함수에게 대해서 typeof에 포장해야

this.grid.getDataSource = function(){ 
if (typeof getDataSource == undefined) 
    return getStore(); 
    else return getDataSource(); 
} 
+1

FYI, * typeof *는 함수가 아닙니다. 연산자입니다. 괄호가 필요 없습니다 ([Pekka의 답변] (http://stackoverflow.com/questions/3552383/testing-the-existence-of-a-method/3552392#3552392) 참조). 여기에서 힘든 길을 배웠습니다 :-) –

+1

이것이 내가 너무 좋아하는 이유입니다. 당신은 물건을 배웁니다! – davidsleeps

+0

네,이 사이트에 가입 한 이후로 많은 것을 배웠습니다 :-) –

1

this.grid.getDataSource = getDataSource || getStore;

+0

* getDataSource *가 선언되지 않은 경우 여전히 오류가 발생합니다. –

0

귀하의 질문에 대한 답변을 제공하는 훌륭한 자료입니다. 그것은 아주 간단한 기능입니다.

http://phpjs.org/functions/method_exists:471

+0

OMG,이게 뭐야? * 하나의 간단한 비교를위한 커스텀 함수를 사용하는 것은 그리 효율적이지 않습니다 ... –

관련 문제