gpt4 book ai didi

javascript - 如何设置事件的 EventTarget

转载 作者:可可西里 更新时间:2023-11-01 01:49:18 24 4
gpt4 key购买 nike

如何设置EventTarget一个事件。

var myObj = {foo: 'bar'};
var event = new Event('eventName');
event.target = myObj;

会导致以下错误:

Uncaught TypeError: Cannot set property target of #<Event> which has only a getter

编辑:

我想写这样的东西,我的类将是目标:

class MyClass {

constructor() {
this.listeners = {};
}

addEventListener(type, callback) {
if (!(type in this.listeners)) {
this.listeners[type] = [];
}
this.listeners[type].push(callback);
}

removeEventListener() {
if (!(type in this.listeners)) {
return;
}
var stack = this.listeners[type];
for (var i = 0, l = stack.length; i < l; i++) {
if (stack[i] === callback) {
stack.splice(i, 1);
return this.removeEventListener(type, callback);
}
}
}

dispatchEvent(event) {
if (!(event.type in this.listeners)) {
return;
}
var stack = this.listeners[event.type];
event.target = this;
for (var i = 0, l = stack.length; i < l; i++) {
stack[i].call(this, event);
}
}

}

let myInstance = new MyClass();
let event = new Event('eventName');
myInstance.dispatchEvent();

更多信息:https://developer.mozilla.org/en/docs/Web/API/EventTarget

最佳答案

好吧 - 我刚刚灵机一动,所以这是给你的另一个答案,它非常顽皮,但可能会奏效。 (为我工作;)

除了执行 event.target = myObj,您可以尝试:

Object.defineProperty(event, 'target', {writable: false, value: myObj});

我在这里可能是错的,但我认为发生的情况是新的 target 属性隐藏了原来的属性。它的工作方式与浏览器内部事件调度不同,浏览器事件处理代码几乎肯定会忽略它,但它可能足以欺骗依赖于 Event.target 的 javascript 代码.

此外,请注意在不同的浏览器中对其进行测试,因为某些浏览器可能会将 Event.target 定义为不可配置的属性。

关于javascript - 如何设置事件的 EventTarget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37456443/

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