2017-05-09 2 views
1

간단한 크롬 확장 기능을 만들고 페이지의 자바 스크립트 기능을 덮어 쓰려고합니다. 자바 스크립트는 나에게 너무 복잡하다. 다음은 코드의 일부입니다.중첩 된 자바 스크립트 함수 덮어 쓰기

}), define("components/Payout", ["react", "game-logic/clib", "game-logic/stateLib"], function(e, t, n) { 
    var r = e.DOM; 
    return e.createClass({ 
     displayName: "Payout", 
     mixins: [e.addons.PureRenderMixin], 
     propTypes: { 
      engine: e.PropTypes.object.isRequired 
     }, 
     getInitialState: function() { 
      return { 
       payout: 0 
      } 
     }, 
     componentDidMount: function() { 
      window.requestAnimationFrame(this.draw) 
     }, 
     draw: function() { 
      if (this.isMounted()) { 
       var e = t.calcGamePayout(t.getElapsedTimeWithLag(this.props.engine)); 
       e ? this.setState({ 
        payout: e * n.currentPlay(this.props.engine).bet 
       }) : this.setState({ 
        payout: null 
       }), window.requestAnimationFrame(this.draw) 
      } 
     }, 
     render: function() { 
      var e = n.currentPlay(this.props.engine).bet < 1e4 ? 2 : 0; 
      return r.span({ 
       id: "payout" 
      }, t.formatSatoshis(this.state.payout, e)) 
     } 
    }) 
}), 

'하이재킹'기능은 '렌더링'기능입니다. 외부 JS 파일에서 어떻게 처리할까요?

내가 원하는 것은 해당 기능의 내용을 조정 된 것으로 바꾸는 것입니다. 변수 obj 그 코드에 의해 반환되는 객체가 포함 된 경우

+0

먼저 '정의'를 덮어 씁니다 (또는 여기에 사용 된 모듈 로더의 노출 된? 내부 구조를 엉망으로 만들 필요가 있습니다). 그러면'.prototype.render' 속성에 접근하여 그것을 납치 할 수 있습니다. – Bergi

답변

0

, 당신은 obj.render에 할당 할 수있는 : 당신의 코드가 같은 r, t, 또는 n 변수를 사용할 수 없습니다

obj.render = function() { 
    // your code here 
}; 

주 오리지널 render가 기능합니다. 이러한 변수는 원래 범위에서만 사용할 수 있으며 함수는 해당 범위를 벗어납니다. 원래 렌더링 메소드를 호출 할 수있게하려면

, 당신은 할 수 있습니다 :

var orig_render = obj.render; 
obj.render = function() { 
    var oldrender = orig_render.bind(this); 
    // your code here, call oldrender() to call original version 
}; 

이는 monkey patching라고합니다.

관련 문제