2011-10-05 2 views
1

다른 개발자가 작성한 일부 코드를 업데이트하면서 많은 기능이 있음을 알게되었습니다. 기능에 대한 설명과 전체 개체가 변수로 설정되었습니다. 예를 들어자바 스크립트/jquery 함수를 변수로 설정하는 것이 가장 좋습니다. 왜?

:

var spellcheck = { 
checkone: function() {  
    <....> 
    spellcheck.jspspellcheck.startSpellCheck("/SpellChecker/", $(e.target).parent().prev('input:enabled, textarea:enabled')); 

}, 
jspspellcheck: { 
    <....> 
    startSpellCheck: function(baseUrl,elements){ 
     <....>   
     spellcheck.jspspellcheck.openCenteredWindow(); 
    } 
} 
} 

은 물론 위의 코드는 샘플이지만, jQuery를 많이 작성하는 방법을 illistrate 않습니다.

점 표기법에서 볼 때 나는 OO 유형 관례를 사용하고있는 것처럼 보이지만 다른 기능 안에 "기능"을 갖는 것은 (적어도 저에게는) 혼란 스럽습니다. 기본적으로이 코드를 다른 명명 된 함수로 리팩터링해야합니까? 아니면 모범 사례가 누락 되었습니까?

+1

예,보기에 익숙해지기 전까지는 혼란 스럽습니다. 아니, 너는 그것을 바꾸면 안된다. 이러한 기능은 이유가있는 곳입니다. 예를 들어, jQuery 플러그인 (http://docs.jquery.com/Plugins/Authoring#Plugin_Methods)을 빌드하는 "공식적인"방법은 이런 방식으로 함수 객체를 생성 할 것을 권장합니다. – Blazemonger

답변

0

실제로는 "리팩토링"하지 않으므로 "움직일"것입니다. 그것의 일부를 구조 조정하는 것은 좋지 않을 것입니다 - 단지 게시 된 코드에서 말할 수있는 방법이 없습니다.

하지만 왜 그렇게하고 싶습니까? 그들은 거기에있어 전역 네임 스페이스 (JS 코드를 모듈화하는 한 가지 방법)에서 벗어나게합니다.

+0

전체 함수 호출이 앵커 태그에 부착 된 "onClick"에서 비롯된 주된 이유는 작동하지 않는 것입니다 ("spellcheck.checkone은 함수가 아닙니다."오류가 발생합니다. 이유를 추적하고 더 많이 파고 가면 추적이 어려워집니다. – wblakenc

+0

@wblakenc 'spellcheck' 및'spellcheck.checkone'의 경고/로그를 먼저 수행하거나 JS 파일이 심지어 로딩 - 내 말은, 분명히 함수 다. 그래서 아마도 다른 일이 벌어지고있는 것이다. –

+0

당신은 맞춤법 검사를 받고있다. 검사는 내부 기능에 매핑되는 맞춤법 검사에서 복귀해야하기 때문에 기능이 아니다. 귀하의 예제의 끝에서 당신은 return {checkone : checkone, jspspellcheck : jspspellcheck}; – jbabey

관련 문제