Allow $().bind and $.unbind() to accept an object of event/handler pairs

Allow $().bind and $.unbind() to accept an object of event/handler pairs


First, this conversation started on the learningjquery.com blog
(http://www.learningjquery.com/2009/06/shorthand-methods-for-unbind).
Ideally, I'd like to see the bind and unbind methods accept an object
of eventType/handler pairs, such that a single wrapped set could take
a hash of bindings in a single call. Something along these lines:
(function($) {
// Keep a copy of the old methods
$.fn._bind = $.fn.bind;
$.fn._unbind = $.fn.unbind;
// Redefine $().bind()
$.fn.bind = function( type, data, fn ) {
    // If only a map of handlers was passed...
    return (arguments.length === 1) ?
    this.each(function(key, node) {
        // Iterate over the map...
        $.each(type, function(event, handler) {
            event == "unload" ?
                // ... using $.fn.one() for "unload" events...
                $(this).one(event, handler) :
                // ... and $.event.add() for others
                jQuery.event.add( this, event, handler );
        });
    }) :
    // Otherwise, use the existing implementation as of 1.3.2,
    // with slight syntactic modifications
    this.each(function(key, node) {
        type == "unload" ?
            // Use $.fn.one() for "unload" events...
            $(this).one(type, fn) :
            // ... and $.event.add() for others
            jQuery.event.add( this, type, fn || data, fn && data );
    });
};
// Redefine $().unbind()
$.fn.unbind = function(type, fn) {
    // If only a map of handlers was passed...
    return (arguments.length === 1)
    this.each(function(){
        // Iterate over the map...
        $.each(type, function(event, handler) {
            // ... and unbind each using event.remove()
            jQuery.event.remove( this, event, handler );
        });
    }) :
    // Otherwise, use the existing implementation as of 1.3.2,
    // copied verbatim
    this.each(function(){
        jQuery.event.remove( this, type, fn );
    });
};
})(jQuery);
Usage would be as follows:
$("#myID").bind({
    click : function(e) {
        // handle click
    },
    mouseover : function(e) {
        // handle mouseover
    },
    mouseout : function(e) {
        // handle mouseout
    }
});
Or, with named functions (ideal for later use of $().unbind()):
$("#myID").bind({
    click : clickHandler,
    mouseover : mouseoverHandler,
    mouseout : mouseoutHandler
});
function clickHandler(e) {
    // handle click
}
function mouseoverHandler(e) {
    // handle mouseover
}
function mouseoutHandler(e) {
    // handle mouseout
}
With named function references, unbinding multiple events would be
simple:
$("#myID").unbind({
    click : clickHandler,
    mouseover : mouseoverHandler,
    mouseout : mouseoutHandler
});
I realize there are some potential issues, such as the ability to pass
custom data to $().bind() is lost when an object of event/handler
pairs is passed. I personally don't usually use it anyhow, and binding
events individually will still support custom data (as the
implementation is the same).