javascript - 新创建的 CustomEvent 没有自己的属性(“类型”)所以 jQuery 失败了?
问题描述
我在一个非常基本的类上工作,它使用(非常)私人事件。
因为我不希望这个类依赖于 jQuery,所以我使用 plain CustomEvent
s(虽然我使用 jQuery)
惊喜一是 jQuery 未能触发我的事件,惊喜二是 jQuery 正在hasOwnProperty("type")
对 CustomEvent 进行测试,这是 FALSE
简而言之:(编辑:JunctionEvent
误导了 - 它只是一个字符串“ju-ac” - 所以我在我的例子中改变了它)
junctionevent = "ju-ac"
e = new CustomEvent(junctionevent, {bubbles: options.bubbles, composed: true})
console.log e, e.type, e.hasOwnProperty("type")
说(“ju-ac”是此开发阶段中事件的名称或类型):
ju-ac { target: null, isTrusted: false, eventPhase: 0, bubbles: true, cancelable: false, returnValue: true, defaultPrevented: false, composed: true, timeStamp: 9808, cancelBubble: false, … }
ju-ac
false
所以事件有一个“属性”类型,有一个名称“ju-ac”但没有一个属性命名类型?
我错了什么?(或者 jQuery 做错了什么?)
编辑:我刚刚了解到,jQuery 无法将普通的 CustomEvents 处理为事件输入,它处理这些事件数据(就像输入中的任何其他对象一样) - 这个赌注我输了。这不会改变我的问题,:为什么在创建属性后有事件type
带有字符串“xxxx”但 hasOwnProperty("type") 返回 FALSE的属性后事件
解决方案
之所以type
在新创建的 CustomEvent 实例中看到该属性,同时在false
使用hasOwnProperty('type')
方法调用时得到,是因为 type 属性是Event
通过原型链从 Object 继承的属性,而不是直接拥有的属性新创建的实例。
因此,实例e
从它的构造函数继承属性CustomEvent
,而CustomEvent
从它自己的构造函数继承属性,Event
对象是属性的所有者type
。
您可以沿着原型链一直到Event
Object 并查看hasOwnProperty("type")
返回 true 的方式,如下所示:
let e = new CustomEvent("ju-ac");
e.type; // "ju-ac";
e.hasOwnProperty("type"); // false
// One step deep into the prototype chain
e.__proto__.constructor; // CustomEvent
e.__proto__.hasOwnProperty("type"); // false
// Two steps deeper into the prototype chain
e.__proto__.__proto__.constructor; // Event
e.__proto__.__proto__.hasOwnProperty("type"); // true
事件:“CustomEvent,我是你爸爸!”
自定义事件:“不!”
推荐阅读
- firebase - Dart null vs Null
- spring-security - Spring - Auth:如何用 JSON-Response 替换 HTML 身份验证失败页面
- python - 我无法在 tensorflow 环境中安装 keras
- github - 如何删除我的 github 存储库(按钮错误)
- node.js - 从后面获取访问令牌并将其缓存到浏览器
- discord - 检测反应 Discord.js
- html - css 动画:将隐藏的 div 从侧面滑动到中心
- c# - 如何在 oData .Net core 3.1 中启用 $levels
- installation - 如何修复柯南包中的库依赖性
- scala - 如何确定元组列表中的最大值?