2009-11-20 4 views
0

사람들이 왜 내 이벤트 처리기에 대해 랩 기능을 사용하는지 이해하려고합니다. 예 :(javascript) 이벤트 처리기와 관련하여 사용되는 줄 바꿈 기능은 무엇입니까?

Example.prototype.wrap = function(obj, method) { 
    return function(event) { 
     obj[method](event); 
    } 
} 

기본적으로 랩은 무엇에 사용됩니까?

편집 : 아래 링크의 예에서, 코드는 다음과 같습니다

String.prototype.capitalize = String.prototype.capitalize.wrap( 
    function(proceed, eachWord) { 
    if (eachWord && this.include(" ")) { 
     // capitalize each word in the string 
     return this.split(" ").invoke("capitalize").join(" "); 
    } else { 
     // proceed using the original function 
     return proceed(); 
    } 
    }); 

"hello world".capitalize()  // "Hello world" 
"hello world".capitalize(true) // "Hello World" 

나는 랩 기능은 내부 기능을 가지고 있음을 볼 수 있지만 나는 구문에 혼란 스러워요. wrap 함수는 function (proceed, eachWord) {blah}을 래핑합니다. 그러나이 경우 진행되는 것은 무엇이고 eachWord는 무엇입니까? 나는 eachWord가 대문자로 변환 된 매개 변수라고 생각한다. ("hello world".capitalize (true)) 그러나 나는 진행이 무엇인지 알지 못한다.

또한이 코드는 'true'값을 전달할 위치와 코드에서 할당 된 변수를 어떻게 알 수 있습니까? (즉, 그 어떤 PARAM입니까?)

+0

http://www.prototypejs.org/api/function/wrap 원래 기능은 (비록 직접하지 않음)입니다 진행합니다. eachWord는 예제에서 전달 된 부울 인수입니다. eachWord가 true이면 정의 된 새 함수가 실행되고 그렇지 않으면 원래 함수 인 proceed()가 호출됩니다. 여기에 혼란이있을 수 있습니다 왜냐하면 그들이 진짜로 그것의 호출 ... 그것은 여전히 ​​원래의 자본 기능에 연결됩니다 중요하지 않습니다 때 진행() 전화했기 때문일 수 있습니다. – SimonDever

+0

아, 래퍼에서 '진행'메서드로 'capitalize'함수를 전달 했습니까? – sepiroth

+0

실제로 :)하지만 실제 프로토 타입 기능이 아닙니다. 간접적 인 층이 있습니다. – SimonDever

답변

0

것은 여기까지 읽어보십시오 :

+0

내가 그랬지만 특별히 도움이되지는 않습니다. – sepiroth

+0

"이전과 이후의 동작을 지정하거나, 반환 값을 변환하거나, 원래 함수가 호출되는 것을 방지하여 기존 함수를 기반으로 빌드 할 수 있습니다." 죄송 합니다만 예제는 다음과 같습니다. 확장 된 래퍼 함수에 추가 인수를 전달할 수 있으며 매개 변수를 기반으로 원래 함수 또는 수정 된 형식을 사용할 수 있습니다. – SimonDever