【问题标题】:javascript+jquery monkeypatching / replace / override a class methodjavascript+jquery 猴子补丁/替换/覆盖类方法
【发布时间】:2012-08-10 00:20:10
【问题描述】:
$.fn.uWorklet = function() {
  var worklet = this;
  var plugin = {
    pushContent: function(target, data) {
    . . .
    }
  }
  return plugin;
}

在上面,我想用我自己的方法替换 pushContent。这有可能吗,如果可以,怎么做?

【问题讨论】:

    标签: javascript jquery overriding monkeypatching


    【解决方案1】:

    你想弄乱私有范围?有很多方法可以做到这一点,但不要告诉任何人你是从我这里学到的:

    > var foo = function() { var x = 1; return x; };
    undefined
    > foo()
    1
    > foo = new Function(foo.toString().replace(/^function\s()[^{]+{|}$/gi, '') \
           .replace(/var x = 1/, 'var x = 2'))
    function anonymous() {
      var x = 2; return x; 
    }
    > foo()
    2
    

    除了开玩笑,必须有更好的解决方案来解决您的问题:如果这是您的代码,则使其更加模块化;如果是库,则分叉代码并修复它。

    【讨论】:

    • (我知道这实际上并没有涉及范围;只是替换定义。您过去可以使用 eval 来做到这一点,但是,大多数浏览器已经修补了它。)
    • 最后一句话+1,但甚至不向任何人显示这个sn-p =)
    【解决方案2】:

    你不能直接替换整个uWorklet 方法吗?如果你有代码,你可以复制它,替换 pushContent 方法并替换整个东西。

    否则,我认为您不能,至少不能使用您目前显示的代码。也许添加一些你如何使用 uWorklet 方法的例子,因为它看起来像返回一个对象,也许你可以替换该对象中的方法....

    【讨论】:

      猜你喜欢
      • 2017-10-05
      • 2012-07-26
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 2011-04-15
      • 2023-04-08
      • 2011-04-16
      相关资源
      最近更新 更多