2012-10-18 4 views
2

onSelect 특성을 가진 jquery 플러그인이 있다고 가정 해 보겠습니다. 사용자가 해당 함수를 함수로 설정하면 해당 함수가 호출 될 때 this은 플러그인이 적용된 객체를 참조합니다. 모두 좋은. 하지만, 그런익명 함수를 통해 javascript에서 함수를 호출 할 때 'this'를 유지할 수 있습니까?

// Get whatever the user put in 
var extOnSelect = options['onSelect']; 

// delete the onSelect attribute 
delete options['onSelect']; 

// re-add onSelect as an anonymous function that calls my method and the user's 
var options = $.extend({ 
    'onSelect': function() { onSelect(); extOnSelect(); } 
    }, options); 

// call the plugin that I am wrapping/injecting extra onSelect code into 
$(this).externalPlugin(options); 

그것은 내 자신의 onSelect를 코드로 전달됩니다 : 나는 onSelect를에 몇 가지 코드를 삽입하기 위해,이 플러그인을 래핑하는 플러그인을 작성하려는 경우

, 나는 같은 것을 할 사용자가 입력 한 내용을 보존합니다.

유일한 두 가지 문제는 각각 두 개의 함수 내에서 this이 더 이상 객체를 참조하지 않으며, 이제는 일반 인라인 함수라고 생각합니다.

이 문제를 해결하는 가장 좋은 해결책은 무엇입니까?

답변

3
사용 apply

arguments object :

extOnSelect.apply(this, arguments); 

정확히 현재 함수처럼 extOnSelect를 호출합니다.

call을 사용할 수는 있지만 이벤트 객체 (및 기타 가능한 인수)를 명시 적으로 전달해야합니다.

+0

감사합니다.이 경우 '인수'는 무엇을 의미합니까? – NibblyPig

+0

'arguments'는 현재의 인수를 포함하는 배열과 같은 객체입니다. 귀하의 경우 - 이벤트 처리기 - 그것은 하나의 항목, [jQuery] 이벤트 개체를 포함합니다. – Bergi

+0

훌륭한 작업 - 이벤트 처리기는 실제로 일부 인수로 트리거되며 사용하기에 멋지게 전달됩니다. 감사! – NibblyPig

1

자바 스크립트 함수 call을 사용해야한다고 생각합니다.

var options = $.extend({ 
'onSelect': function() { onSelect.call(this); extOnSelect.call(this); } 
}, options); 
관련 문제