Javascript 字符串化事件对象可以工作,但实际上是空的
我有一个自定义的stringify函数,可以处理循环引用:Javascript 字符串化事件对象可以工作,但实际上是空的,javascript,json,dom,Javascript,Json,Dom,我有一个自定义的stringify函数,可以处理循环引用: const customStringify = function (v) { return JSON.stringify(v, function(k, v) { if (v instanceof Node) { return 'Node'; } if (v instanceof Window) { return 'Window'; } return v; }); }
const customStringify = function (v) {
return JSON.stringify(v, function(k, v) {
if (v instanceof Node) {
return 'Node';
}
if (v instanceof Window) {
return 'Window';
}
return v;
});
};
但如果我使用它来字符串化事件对象:
window.addEventListener('click', function (ev) { // MouseEvent
const v = customStringify(ev); // {"isTrusted":true}
});
v是如下所示的字符串:
{"isTrusted":true}
真奇怪。我尝试了其他一些自定义字符串化辅助函数,它们都给出了相同的结果
我看了这条线:
但我的问题似乎更具体。忽略了不可枚举的属性,并且a的大多数属性(显然)是不可枚举的:
document.querySelector('button')。addEventListener('click',ev=>{
让道具=['isTrusted','target','clientX','clientY','layerX','layerY'];
props.forEach(prop=>{
console.log(prop+'?',ev.propertyEnumerable(prop));
});
});代码>
试试看
我还查看了MouseEvent在原型链的某个地方是否有toJSON
方法,但我没有看到,您希望通过这样做实现什么?或者你只是好奇?我的目标是在前端的线程之间传递事件数据(消息传递)