Function |
Prototype takes issue with only one aspect of functions, really: binding.
On this page
“Binding” basically determines the meaning, when a function runs, of the this keyword. While there usually is a proper default binding (this refers to whichever object the method is called on), this can be “lost” sometimes, for instance when passing a function reference as an argument.
Here’s an example:
var obj = { name: 'A nice demo',
fx: function() { alert(this.name); } };
function runFx(f) { f(); }
window.name = 'I am such a beautiful window!';
obj.fx(); // This works fine, displaying "A nice demo." runFx(obj.fx); // This goes awry, displaying "I am such a beautiful window!"
The reason why the second invocation boinks is: passing obj.fx as a regular function reference loses its binding to obj. It reverts to runFx’s default binding, which is the window object.
Prototype solves this. You’ll find two new methods on any function: one that guarantees binding (it can even guarantee early parameters!), and one that is specific to functions intended as event handlers. See the list below.
bind
bind(thisObj[, arg...]) -> Function
Provides a guaranteed-binding equivalent of the original function, possibly with pre-filled arguments.
bindAsEventListener
bindAsEventListener(thisObj[, arg...]) -> Function
An event-specific variant of bind, which makes sure the function will get the current event object as first argument.
|
Prototype API 1.5.0 - prototypejs.org