如何设置事件的EventTarget

2024-03-25

如何设置事件目标 https://developer.mozilla.org/en/docs/Web/API/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

Edit:

我想写这样的东西,我的班级将是target:

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 https://developer.mozilla.org/en/docs/Web/API/EventTarget


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

而不是做event.target = myObj,你可以尝试:

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

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

另外,请小心在不同的浏览器中测试它,因为某些浏览器可能会定义Event.target作为不可配置的属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何设置事件的EventTarget 的相关文章

随机推荐