2011-08-03 3 views
1

이것은 객체 지향 프로그래밍에서 오는 일반적인 작업이므로 가능한 기존 함수를 재정 의하여 JavaScript 프로그램의 동작을 변경하고 싶습니다. 나는 Windows가 후크를 쓰고 연결하는 것을 도입 한 것을 기억합니다. 그래서 내가 원하는 것은, onload 함수를 호출하는 onload hook을 호출하는 웹 페이지입니다. 이전 구현을 유지하면서이 함수를 재정의하려고합니다. 나는 단순히JS 함수를 체인에서 이전에 재정의하는 방법

function initFields() { 
    // do some stuff ... 
    // I do not know how to call super.initFields() here 
} 

으로 내 JS 함수를 정의하면 나는

initFields.prototype = function() { 
    // do some stuff ... 
    // but still have no idea how to call the original one 
}; 

누군가가 도와 드릴까요 쓸 수 있습니다 당신처럼 뭔가를 읽어?

+0

http://documentcloud.github.com/underscore/#wrap

은 우리에게 원래의 기능이 등, 당신이 사용하는 방법, 사용 방법 또한 변수로 기존의 기능을 백업 할 수 있습니다 – Cameron

답변

6

하나의 옵션은

var initFieldsInitial = initFields; 
function initFields() { 
    // your stuff 
    initFieldsInitial.apply(this, arguments); 
} 
+0

, 선언 방법의 예를 보여줍니다. 'var oldFunc = obj.func; obj.func = 새로운 함수() {...; oldFunc.apply (this, arguments); };' – OverZealous

+0

initFieldsInitial이 컨텍스트에서 재정의 된 initFields의 주소를 가지고있는 것처럼 보입니다. 그래서 루프가 생겼지 만 생각이 맘에 들어요. –

2

당신은 underscore.js 라이브러리에서 랩() 함수를 시도 할 수있다.

var initFields = function() { 
    // do something 
    console.log('initFields'); 
} 

initFields = _.wrap(initFields, function(initial) { 
    // do some stuff 
    console.log('wrapper'); 
    initial(); 
}); 

$(document).ready(function() { 
    initFields(); 
}); 
관련 문제