监听函数执行

时间:2019-05-31 12:10:27

标签: javascript rxjs rxjs5 rxjs6

我有一个函数doSomething()可以由 许多不同的DOM事件。 是否可以不监听某个事件,而是监听一下某个函数被调用/监听某个函数的执行情况?

我的意思是-我无法编辑原始功能,并且在不希望重复使用将所有功能附加到所有这些事件的所有功能上寻求解决方案。

2 个答案:

答案 0 :(得分:4)

如果可以覆盖该函数,则可以存储原始函数,覆盖它,然后调用原始函数。我将其设置为使用rxjs,因为它在问题的标签中,但是无论有无,该原则都适用。

const DO_SOMETHING_EVENT_NAME = 'doSomething called';

function doSomething() {
  console.log('doing something');
}


var doSomethingOriginal = doSomething;
window.doSomething = function () {
  var event = new Event(DO_SOMETHING_EVENT_NAME);
  document.dispatchEvent(event);
  doSomethingOriginal();
};

var observable = rxjs.fromEvent(document, DO_SOMETHING_EVENT_NAME);

observable.subscribe(() => console.log('doing something else'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.2/rxjs.umd.js"></script>
<button onclick="doSomething()">First</button>
<button onclick="doSomething()">Second</button>

答案 1 :(得分:0)

this answer可以看出,您需要实现“面向方面的编程(AOP)”的https://github.com/cujojs/meld