覆盖嵌套的javascript函数

时间:2017-05-09 21:45:58

标签: javascript

我正在制作一个简单的Chrome扩展程序,并希望覆盖页面上的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))
        }
    })
}),

我想要劫持的功能&#39;是&#34;渲染&#34;功能。我将如何从外部JS文件中进行该操作?

我想要的是用调整后的内容替换该功能的内容。

1 个答案:

答案 0 :(得分:0)

如果变量obj包含该代码返回的对象,则可以分配给obj.render

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

请注意,您的代码无法像原始r函数一样使用tnrender变量。这些变量仅在原始范围内可用,并且您的功能超出了该范围。

如果您希望能够调用原始渲染方法,可以执行以下操作:

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