diff --git a/CHANGELOG b/CHANGELOG index e948284f1..b91b829ec 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,5 @@ +* Optimize Function#bind and Function#bindAsEventListener to avoid using Array#concat when only the context argument is given. [kangax] + * Ensure Selector.handlers.id finds the proper element even when it's not attached to the document. [jddalton] * Fix Position.within in IE. [jddalton] diff --git a/src/base.js b/src/base.js index 73328d387..f954a37eb 100644 --- a/src/base.js +++ b/src/base.js @@ -168,16 +168,30 @@ Object.extend(Function.prototype, { bind: function() { if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this; var __method = this, args = $A(arguments), object = args.shift(); - return function() { - return __method.apply(object, args.concat($A(arguments))); + + // Avoid using Array#concat when only the context argument is given. + if (args.length) { + return function() { + return __method.apply(object, args.concat($A(arguments))); + }; } + return function() { + return __method.apply(object, arguments); + }; }, bindAsEventListener: function() { var __method = this, args = $A(arguments), object = args.shift(); - return function(event) { - return __method.apply(object, [event || window.event].concat(args)); + + // Avoid using Array#concat when only the context argument is given. + if (args.length) { + return function(event) { + return __method.apply(object, [event || window.event].concat(args)); + }; } + return function(event) { + return __method.apply(object, [event || window.event]); + }; }, curry: function() {