【问题标题】:Bind function call in object在对象中绑定函数调用
【发布时间】:2021-08-28 03:12:32
【问题描述】:

目标:在对象中定义的函数被调用时执行函数

例子:

var obj = {
    endUpdate: function(){
       ... (async stuff from library, cannot modify this code)
    }
}

我想写这样的东西,以了解何时调用了 endUpdate

obj.on('endUpdate', function(){
    // do stuff here when "endUpdate" in above object is called
})

【问题讨论】:

  • 您可以发起自定义事件:developer.mozilla.org/en-US/docs/Web/Events/…
  • 我收到错误“Uncaught TypeError: g.addEventListener is not a function”,截图在这里:i.imgur.com/2UeO6ug.png
  • 这被标记为“SlickGrid”,因此我很感兴趣。也许您应该向我们提供更多关于如何设置和调用 SlickGrid 或事件的信息。

标签: javascript jquery asynchronous slickgrid deferred


【解决方案1】:

你可以像这样很容易地创建订阅者函数

var obj = {
   listeners: {
      endUpdate: []
   },
   on: function(name, callbackFn){
      this.listeners[name].push(callbackFn);
   },
   runListeners: function(name) {
      this.listeners[name].forEach((fn) => fn());
   },
   endUpdate: async function(){
       await someStuffFromLib();
       this.runListeners('endUpdate');
   }
}

否则你可以增强对象和链异步功能,只要你一直保持链

 var obj = {
   endUpdate: function(){
      const thisIsAPromise = someStuffFromLib();
      return thisIsAPromise;
   }
}

const newObj = {
    endUpdate: (...args) => obj.endUpdate(...args).then(
                (result) => { console.log(result)})
}

【讨论】:

  • 我不能修改原来的变量“obj”
  • 我无法修改原始变量“obj” 这很重要 - 你应该在问题中提到这一点。
  • 我做到了,请参阅我的评论“库中的异步内容,无法修改此代码”。无论如何,感谢您的努力/时间和帮助,非常感谢
猜你喜欢
  • 1970-01-01
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-26
  • 2012-08-10
  • 2017-12-05
  • 1970-01-01
相关资源
最近更新 更多