在mootools中调用没有上下文的.fireEvent()

Ben*_*nce 1 javascript mootools

以下几行有什么想法吗?

什么样的活动是"Popup"在这里?

fireEvent('Popup','ok');
Run Code Online (Sandbox Code Playgroud)

Dim*_*off 5

事件通常分为两种类型.DOMEventClass.Event.

最常见的是,后者是有意义的.this.fireEvent('popup', 'ok');会让实例知道发生了什么奇妙的事情.

与类中的[Options,Events]mixins 一起使用,如果您的实例已创建:

var foo = new someclass({
    onPopup: function(status) {
        console.log(status); // ok!
        console.log(this); // the instance (foo);
    }
});

// later.
foo.fireEvent('popup', 'fail');
Run Code Online (Sandbox Code Playgroud)

但在你的情况下,我不确定它是关于一个类,因为:

您还可以在宽松/模糊的环境中使用事件,例如DOM元素,您可以在其中发布事件到pub/sub各种组件.例如.window.fireEvent('popup', 'ok');- 或者像在你的例子中一样,fireEvent('popup')它将在全局窗口对象上触发事件回调,因为没有定义其他上下文.

这将适用于您在块中添加的任何内容,如下所示:

window.addEvent('popup', function(status) {

});
Run Code Online (Sandbox Code Playgroud)

不键入上下文对象对于作用域链查找以及可读性来说真的很糟糕.你可以做的事实fireEvent('domready')并不意味着你应该这样做.写这篇文章的人正在采取不提高可读性的愚蠢捷径.fireEvent它本身是一个来自原型的expando属性,它不是一个全局变量/函数,尽管它看起来像你发布的代码一样...