使用jQuery,您可以在任何jQuery对象上使用.on()
/ .off()
/ .trigger()
方法,从而为您提供对事件系统的强大访问。我正试图在vanilla JavaScript中做类似的事情,但我一直遇到"TypeError: Illegal Invocation"
。我知道这个错误通常是指当方法需要时会丢失this
引用。使用.apply
或.call
似乎通常可以解决问题,但我仍遇到问题。
具体来说,我正在尝试创建一个启用事件的“类”,然后我可以扩展其他类,为我提供了一种在非DOM对象上侦听和触发事件的方法。 (是的,我知道JS没有真正的类。我正在使用CoffeeScript,那就是那里使用的语法糖。)这是“类”函数,它创建一个新对象,其属性和值与传递给的对象相同构造函数,并提供了来自.apply()
的{{1}}方法的三种方法。关于如何使这项工作的任何指导都将非常感激!
EventTarget.prototype
当我尝试在EventEnabled的一个实例上调用这三个方法中的任何一个时,我得到一个“TypeError:Illegal Invocation”。
感谢您对此有任何见解!
答案 0 :(得分:6)
EventTarget
只是一个interface,它是在本机DOM对象上实现的,而不是javascript可用的构造函数。虽然它可能在全局范围内可用,但您不能使用它来实例化它的实例。
此外,您只能将其方法应用于本机实现该接口的对象(如DOM元素),而不应用于EventEnabled
构造函数的任意实例。您将需要创建一个内部节点,或者您需要实现自己的事件调度系统(如果您不想使用任何可用的库)。