2017-05-09 15 views
1

私は単純なchrome拡張機能を作成しており、ページ上でjavascript関数を上書きしたいと考えています。 JavaScriptは私にとってはあまりにも複雑すぎます。これはコードの一部です:入れ子になったjavascript関数を上書きする

}), 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

最初に 'define'を上書きする必要があります(またはここで使用されているモジュールローダーの?内部構造を混乱させる)。その後、 '.prototype.render'プロパティにアクセスしてハイジャックすることができます。 – Bergi

答えて

0

、あなたはobj.renderに割り当てることができます:あなたのコードのようなrt、またはn変数を使用することはできません

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

注意をオリジナルrender機能します。これらの変数は元のスコープでのみ使用でき、関数はそのスコープ外にあります。

あなたは、元の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と呼ばれています。

関連する問題