2011-07-06 12 views
2

페이지가로드 된 후 JavaScript 기능을 편집 할 수 있습니까? 로드 후 동적으로 함수를 편집하고 싶습니다.자바 스크립트 편집 기능

+0

어떻게 정의하고 함수를 호출하고 있습니까? – lonesomeday

+0

다른 기능을 쓸 수없는 이유는 무엇입니까? 무엇을 성취하려고합니까? – MoarCodePlz

+0

나는 일반 함수의 예와 같이 함수를 정의 기능 XY() { } – PageCreator

답변

5

당신은 기능을 편집 할 수 있지만 기능은 객체 자바 스크립트

var myFunc = function() { return "Hello World"; }; 

myFunc = function() { return "Goodbye"; }; 

:, 예컨대을 교체 할 수 있습니다, 그래서 새로운 값을 설정하여 교체 할 수 있습니다. 너가 말하는게 이거니?

+0

예를하지만 난 함수의 예를 기능 검사() { 수익을 정의 할 때 진정한; } 어떻게이 기능을 변경할 수 있습니까? – PageCreator

+0

+1 정확하게 말하려고했던 것. :). 다음은 그 예입니다 : http://jsfiddle.net/UxN2s/1/ – mellamokb

+1

@PageCreator : 다음과 같은 코드를 사용합니다.'test = function() {return false; };'. 이제 앞으로의 모든 호출에 대한 정의가 변경되었습니다. – mellamokb

0

당신에게 속하지 않는 코드를 해킹하지 않는 한 더 나은 해결책은 조건 (매개 변수 전달, 환경, 다른 상태, 데이터)에 따라 적응할 수있는보다 유연한 초기 자바 스크립트 함수를 작성하는 것입니다. 다른 출처에서 가져온 것 등 ...). 그런 다음, 한 가지 기능을 처음에는 한 번만 작성하여 모든 다른 상황을 처리 할 수 ​​있습니다.

런타임시 동작을 적용하는 데 사용할 수있는 콜백 함수를 전달하는 등의 디자인 패턴을 사용할 수도 있습니다. 많은 콜백을 원할 경우 여러 가지 선택적 메소드가있는 객체를 전달하여 함수 중에 호출 할 수 있습니다. 이런 식으로 다른 콜백 함수를 전달하여 코드를 변경하지 않고도 주요 함수의 동작을 크게 변경할 수 있습니다.

예를 들어 태그가 지정된 데이터 구조를 입력으로 사용하여 결과 배열을 반환하는 구문 분석 함수가 있다고 가정 해 보겠습니다. 우리는 콜백을 전달하여이 파싱 함수의 동작을 수정할 수 있기를 원합니다. 그래서 우리는 콜백 객체를 취하기 위해 파싱 함수를 작성합니다. 콜백 객체는 하나 이상의 메소드 (모두 선택적 임)와 각 콜백에 전달되는 상태 변수를 포함합니다. Javascript에서 ajax 또는 비동기 네트워킹으로 작업 한 사람은 콜백 객체 개념을 인식합니다. 다음은 콜백 객체를 사용하는 방법을 보여주는 프로세스의 의사 코드입니다. 실제 기능은 분명히 이것보다 훨씬 더 복잡 할 것이다, 그러나 그것은 희망 개념 설명 : 기존 기능에 작업을 추가하려면

function parseMyData(data, callbacks) { 
    var output = [];     // output we accumulate 
    var currentTag; 
    callbacks = callbacks || {};  // make the callbacks object optional 

    // do any preprocessing that the caller specified 
    if (callbacks.preProcessData) { 
     data = callbacks.preProcessData(data, callbacks.state); 
    } 

    [[code to parse to the first tag in the data (after doing so currentTag contains the tag we just parsed)]] 

    // give our callback object the opportunity to do something to this tag or return null to skip it 
    if (callbacks.preProcessTag { 
     currentTag = callbacks.preprocessTag(currentTag, callbacks.state); 
    } 
    if (currentTag) { 
     [[code here for the default processing of the tag that will push results into the output array]] 
    } 
    return(output); 
} 
0

당신이 그것을 넣어 그것을 "납치"수 임시 변수를 작성하고 덮어 쓰기 된 함수 내에서 호출합니다. 예 :

// The original function. 
function sayName(name) { 
    alert(name); 
} 

// Temporary variable for original function. 
var __sayHello = sayName; 

// Overwrite the original function, adding extra actions. 
sayName = function(name) { 
    alert('Hello'); 
    // Call the original function using its temporary variable. 
    __sayHello(name); 
} 

// Call the overwritten function. 
sayName('Bob');