2017-05-09 4 views
1

Ich mache eine einfache Chrome-Erweiterung und möchte eine JavaScript-Funktion auf einer Seite zu überschreiben. Das Javascript ist zu komplex für mich auch zu verstehen. Dies ist ein Teil des Codes:Überschrieben verschachtelte Javascript-Funktion

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

Die Funktion i ‚kapern‘ will, ist die „Render“ -Funktion. Wie würde ich das aus einer externen JS-Datei machen?

Was ich will ist, den Inhalt dieser Funktion durch etwas angepasst zu ersetzen.

+0

Zuerst müssen Sie 'define' überschreiben (oder mit den exponierten? Interna des Modulladers, der hier verwendet wird, umgehen). Dann können Sie auf die Eigenschaft ".prototype.render" zugreifen und diese entführen. – Bergi

Antwort

0

Wenn die Variable obj die von diesem Code zurückgegebene Objekt enthält, können Sie zu obj.render zuordnen:

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

Beachten Sie, dass der Code nicht in der Lage sein, die r zu verwenden, t oder n Variablen wie die Original render Funktion tut. Diese Variablen sind nur im ursprünglichen Bereich verfügbar und Ihre Funktion liegt außerhalb dieses Bereichs.

Wenn Sie das Original nennen Methode machen können, möchten, können Sie tun:

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

Dies wird monkey patching genannt.