javascript - 在 jQuery 中使用 "class/object"MooTools 风格的事件

标签 javascript jquery mootools mootools-events

MooTools 的优点之一是它可以让您轻松地向对象分配/触发事件,例如:

var playerSingleton = new (new Class({
  Implements: [Events],

  initialize: function() {},

  setVolume: function() { 
    // do some stuff..
    this.fireEvent('volumeChanged')
  }

}));

// Somewhere else...

playerSingleton.addEvent('volumeChanged', function() {
  // do something when volume changes
});

playerSingleton.setVolume(75);
// bam our event fires.

如何使用 jQuery 完成这样的事情? 我知道有 .bind.trigger,但似乎唯一的方法是将事件绑定(bind)/触发到窗口对象:

$(window).bind('volumeChanged', fn);

还有比这更好的方法吗?更像 MooTools 方法吗?

最佳答案

jQuery 的绑定(bind)和触发器似乎适用于普通对象。还没有看到源代码来了解它是如何工作的(如果它是公共(public) API 的一部分),但它确实如此。请参阅this discussion从去年开始就一直在探索同样的想法。

player 是一个常规对象,具有设置音量的方法,并添加音量变化的监听器。 an example here .

var player = {
    setVolume: function() {
        $(this).trigger("volumeChanged");
    },

    addVolumeChangeHandler: function(fn) {
        $(this).bind("volumeChanged", fn);
    }
};

// add a listener
player.addVolumeChangeHandler(function() {
    alert("volume has been changed");
});

// change volume (should fire the attached listener)
player.setVolume(); // alerts "volume has been changed"

关于javascript - 在 jQuery 中使用 "class/object"MooTools 风格的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2625122/

相关文章:

javascript - Mongoose/Express/Nodejs 试图将变量从服务器传递到 html

javascript - Nativescript核心相机集成在一个层中,而不是启动相机应用程序来拍照

javascript - Onclick 无法使用 Bootstrap 工作

javascript - 在初始页面加载时保持 MooTools Accordion 关闭

不同浏览器中的 Javascript 滚动条类和鼠标滚轮速度

javascript - 如何使用 Javascript 设置表单元素的值?

javascript - 添加为属性时如何访问另一个函数中的函数?

javascript - React类组件方法: is my code imperative?

jquery - Google map 标记在 IE7 中不显示

javascript - $(window).width() 与 $(document).width() 之间的区别