在Javascript中了解猴子修补

时间:2016-05-04 07:01:17

标签: javascript monkeypatching

我试图理解猴子补丁如何在JavaScript中运行的概念?

我经历了太多的例子,但无法理解

例如 - Monkey在Redux中修补调度功能

let next = store.dispatch
store.dispatch = function dispatchAndLog(action) {
  console.log('dispatching', action)
  let result = next(action)
  console.log('next state', store.getState())
  return result
}

来源:http://redux.js.org/docs/advanced/Middleware.html#attempt-3-monkeypatching-dispatch

  

任何人都可以用简单的术语和示例来解释猴子补丁

哪个是使用它的最佳方案?

感谢。

1 个答案:

答案 0 :(得分:3)

假设您使用的库通过方法测试定义了一个类Test。

如果你想修补猴子 - 它你必须使用这种代码并在>库后包含它:

// replacing current implementation with a new one
Test.prototype.test = function(arg1, arg2, ...){...}

现在让我们说你想做一些更聪明的事情,比如在没有修改其余部分的情况下向函数中添加一些内容就是你将如何做到这一点:

var oldFN = Test.prototype.test;
Test.prototype.test = function([arguments...]){
    [...some custom code...]
    oldFN.apply(this, arguments);// arguments keyword refer to the list of argument that your function recevied, if you need something else use call.
    [...some custom code...]
}

猴子修补是有效的,但必须明智地使用。此外,每次升级库时,都必须检查所有补丁是否正常工作。