相关疑难解决方法(0)

浏览器端是否有任何EventEmitter在nodejs中具有类似的逻辑?

在node.js中使用eventEmitter非常容易:

var e = new EventEmitter();
e.on('happy', function(){console.log('good')});
e.emit('happy');
Run Code Online (Sandbox Code Playgroud)

浏览器原生的任何客户端EventEmitter?

javascript browser

17
推荐指数
5
解决办法
7689
查看次数

addEventListener上的非法调用

使用jQuery,您可以在任何jQuery对象上使用.on()/ .off()/ .trigger()方法,为您提供对事件系统的强大访问.我正试图在vanilla JavaScript中做类似的事情,但我一直在努力"TypeError: Illegal Invocation".我知道这个错误通常是指this在方法需要时丢失引用.使用.apply.call似乎通常做的伎俩,但我仍然遇到问题.

具体来说,我正在尝试创建一个启用事件的"类",然后我可以扩展其他类,为我提供了一种在非DOM对象上侦听和触发事件的方法.(是的,我知道JS没有真正的类.我正在使用CoffeeScript,那就是那里使用的语法糖.)这是"类"函数,它创建一个新对象,其属性和值与传递给的对象相同构造函数,并提供了三种方法.apply()的方法从EventTarget.prototype.任何有关如何使这项工作的指导将非常感谢!

EventEnabled = (function() {
  function EventEnabled(obj) {
    var key, val;
    for (key in obj) {
      val = obj[key];
      this[key] = val;
    }
  }

  EventEnabled.prototype.addEventListener = function() {
    return EventTarget.prototype.addEventListener.apply(this, arguments);
  };

  EventEnabled.prototype.removeEventListener = function() {
    return EventTarget.prototype.removeEventListener.apply(this, arguments);
  };

  EventEnabled.prototype.dispatchEvent = function() {
    return EventTarget.prototype.dispatchEvent.apply(this, arguments);
  };

  return EventEnabled;

})();
Run Code Online (Sandbox Code Playgroud)

当我尝试在EventEnabled的实例上调用这三个方法中的任何一个时,我得到一个"TypeError:Illegal Invocation".

感谢您对此有任何见解!

javascript events javascript-events addeventlistener prototypal-inheritance

3
推荐指数
1
解决办法
1307
查看次数