Javascript:如何更改函数动态调用params?

Gab*_*ira 2 javascript jquery method-call

我从jquery的json调用中收到一些'body'内容,在那里我可以通过执行以下方式获取返回的唯一javascript元素:

script_element = $(data.body)[1]
Run Code Online (Sandbox Code Playgroud)

这相当于:

<script type=?"text/?javascript">?
    updater('foo', 'bar', {}, '0', constant='');
</script>?
Run Code Online (Sandbox Code Playgroud)

所以,typeof script_element回报"object"

而且,如果我跑script_element.innerText,我可以得到:

updater('foo', 'bar', {}, '0', constant='');
Run Code Online (Sandbox Code Playgroud)

收到这个脚本之后,我现在正在做的就是运行eval它,但是搜索我无法找到运行eval更改函数调用参数的方法.

我正在尝试做的是更改third调用的参数,在这种情况下{},可以根据json调用的返回而改变,所以我不能只搜索{}.

我也可以这样做script_element.text.split(',')[2],并在运行中更改此文本,但我认为应该有更好的方法来做到这一点.

我不知道javascript是否可以识别和处理"未来的方法调用",但仍然认为应该有更好的方法.

任何的想法?

pim*_*vdb 5

你可以做的是遮蔽函数,以便能够改变第三个参数.你应该在获取JSON之前定义该阴影函数.

var originalUpdater = updater; // keep old function to call

// overwrite (shadowing)
updater = function(a, b, c, d, e) {
    // change c appropriately here
    originalUpdater(a, b, c, d, e);
}
Run Code Online (Sandbox Code Playgroud)

然后你仍然可以只是eval它(这不是很安全,但如果我没有误,那不是你的观点),它会调用阴影函数.


更通用的阴影方法将遵循以下方式:

var originalUpdater = updater; // keep old function to call

// overwrite (shadowing)
updater = function() {
    // change arguments[2] appropriately here
    originalUpdater.apply(this, arguments);
}
Run Code Online (Sandbox Code Playgroud)

小提琴:http://jsfiddle.net/n7dLX/