【问题标题】:I need to overwrite a run-time function js我需要覆盖一个运行时函数 js
【发布时间】:2014-07-20 06:37:59
【问题描述】:

我需要覆盖我从脚本中获取的函数,函数开始如下:

(function (K) {
//code
})(window);

对于普通功能来说很简单:

function nameFun = function (params) {
//code
}

那么现在,我该如何覆盖该函数?

谢谢

【问题讨论】:

  • 在该函数中,K 对象的设置是什么?如果它正在设置任何内容,那么您可以通过 window.whatever = yourNewFunction; 覆盖它。
  • 但是我覆盖了所有的脚本?
  • 这取决于该函数体内的内容。可以发一下正文吗?
  • 太长了,K是一个对象窗口我可以做K.whatever = function(){}吗?
  • 这真的取决于...如果该语句所做的只是将函数分配给K AKA window 的属性,那么是的,您可以用自己的函数覆盖该函数。您可能想在 pastebin 或其他地方发布完整的功能,以便我们更好地了解发生了什么。

标签: javascript function overwrite


【解决方案1】:

我不相信你可以 - 这是一个立即调用的匿名函数,因此它不会存储在任何对象上供你覆盖。即使它存储在某个地方,因为它会立即被调用,所以在它执行之前你不能用你自己的代码覆盖这个函数。

【讨论】:

  • 有没有办法只取一部分脚本或者绕过这个问题? (我需要覆盖,因为在那个函数中有一个错误)
  • @Scutto:发布错误的代码,我们或许可以提供更多帮助。
  • 这是错误:org.mozilla.javascript.EcmaError: TypeError: [JavaPackage com.greensock.events.EventDispatcher] 不是函数,它是对象。 (debug.js#17214) 这是行:M = j.Ticker.prototype = new j.events.EventDispatcher();
  • 这可能只是推迟问题,但你可以说 j.Events.EventDispatcher = function() {}
【解决方案2】:

如果这个函数写在单独的js文件中,包含在<script src="...">标签内的页面上,你可以尝试在这个标签之后放置内联js代码并以编程方式将其删除。

如果没有,您可以简单地将这个代码块包装在 try { ... } catch (e) { console.log(e); } 中。

【讨论】:

  • 我在 Web 服务中工作,我需要加载该脚本以在 WS 中的函数出错后获取一些数据。所以我可以决定不加载脚本根本不写函数不加载脚本
  • 所以你只需要部分覆盖目标函数?
  • 我只需要覆盖部分脚本,而其他功能保持不变。我不需要用一些代码覆盖那个函数,只要那个函数不存在就让脚本像这样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-30
相关资源
最近更新 更多