gpt4 book ai didi

javascript - 测试一个对象是否是 DOM 事件

转载 作者:数据小太阳 更新时间:2023-10-29 05:33:53 26 4
gpt4 key购买 nike

从像这样的函数中

function eventHandler(e) {
// ...
}

是否有一种可靠且有效的方法来确定 e 是否为 DOM 事件?

最佳答案

我认为没有可靠的方法可以确定给定对象是否不是 DOM 事件。

  1. typeof e 将始终为真正的 Event 对象返回 'object',这没有帮助。
  2. 您可能检查对象的任何属性都可以存在于真正的事件对象或任何非事件对象中。
  3. 您可能认为原型(prototype)链可用于确定这一点,但它与 #2 存在相同的问题(可以轻松复制)。
  4. contructor 属性看起来很有前途,但可以这样做:
function DummyEvent(){
this.constructor.toString = function(){
return "function MouseEvent() { [native code] }";
}
}

这最终使 console.log(e.constructor) 打印 "function MouseEvent() { [native code] }"

那么,有没有一种“可靠”的方法来判断一个对象是否是一个事件呢? 没有

编辑 — 请注意,如果您想防止事件欺骗,那么所有这些都是无关紧要的,因为您可以轻松创建真实事件。

var evt = new Event('click');
var evt2 = document.createEvent('MouseEvents');
evt2.initMouseEvent('click', ...);
//etc

Edit2 — 我创建了一个测试 jsFiddle试图找到一些方法来区分物体,但我还没有找到任何确定的东西。请注意,我没有在 DummyEvent 上指定属性,因为这些属性显然很容易被欺骗。

关于javascript - 测试一个对象是否是 DOM 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14407245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com