javascript - 重新绑定 onclick, on* 事件监听器进行调试
问题描述
我想monkeypatch 事件监听器注册。
我发现这个答案显示了如何做到这一点addEventListener
:
const nativeEventListener = EventTarget.prototype.addEventListener; EventTarget.prototype.addEventListener = function(...args) { if (this.matches('div') && args[0] === 'click') { console.log('listener is being added to a div'); debugger; } nativeEventListener.apply(this, args); } // then, when an event listener is added, you'll be able to intercept the call and debug it: document.querySelector('div').addEventListener('click', () => { console.log('clicked'); });
但这不包括onclick
,onkeydown
等作业。
我不知道如何为那些做同样的事情,因为
const nativeOnClick = HTMLElement.prototype.onclick;
引发类型错误
TypeError: 'get onclick' called on an object that does not implement interface HTMLElement.
现在我想知道是否有一种特殊的方法可以单独检索setter 和 getteronclick
等,但到目前为止我的谷歌搜索没有运气。
解决方案
您可以通过以下方式获得原始的 setter 函数:
const originalSetter = Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'onchange').set;
如果你想重新定义一个属性,你应该看看 using Object.defineProperty()
.
推荐阅读
- php - PHP - 查找数组中的所有路径(2边)
- video - 如何从 youtube 上的多个视频 ID 创建播放列表?
- c - 我在 C 中收到警告
- java - 从 Spring Boot 项目集成 Python 代码
- git - 如何检查git分支是否是新创建的?
- c++ - Assimp 动态链接问题 C++, Directx11
- android - mergeExtDexDebug 失败,类型定义多次错误
- javascript - 在 React Native WebView 中注入 JavaScript 后渲染屏幕
- oracle-apex - 使用默认值更新列
- acumatica - 如何在 acumatica 中为具有不同下拉值的每一行动态加载下拉值?