【问题标题】:listening for a function execution监听函数执行
【发布时间】:2019-10-17 02:11:26
【问题描述】:

我有一个函数doSomething() 可以被触发 许多不同的 DOM 事件。 是否可以不听事件,而是听某个时刻,当该函数被调用/听函数执行时?

我的意思是 - 我无法编辑原始函数并寻找解决方案,不想重复所有这些事件的附加函数。

【问题讨论】:

  • 你能改变调用这个函数的点吗? This answer 表明不可能挂钩只是一个函数调用。

标签: javascript rxjs rxjs5 rxjs6


【解决方案1】:

据我从this answer 得知,您需要实现“面向方面编程 (AOP)”https://github.com/cujojs/meld

【讨论】:

    【解决方案2】:

    如果可以覆盖该函数,您可以存储原件,覆盖它,然后调用原件。我已将其设置为使用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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多