<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>Prototype JavaScript framework - Function</title>
  <id>tag:prototypejs.org.,2008:mephisto/api/function</id>
  <generator uri="http://mephistoblog.com" version="0.7.3">Mephisto Noh-Varr</generator>
  <link href="http://prototypejs.org./feed/api/function/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://prototypejs.org./api/function" rel="alternate" type="text/html"/>
  <updated>2008-01-10T12:41:04Z</updated>
  <entry xml:base="http://prototypejs.org./">
    <author>
      <name>Mislav</name>
    </author>
    <id>tag:prototypejs.org.,2008-01-08:18687</id>
    <published>2008-01-08T23:15:00Z</published>
    <updated>2008-01-10T12:41:04Z</updated>
    <category term="Function"/>
    <link href="http://prototypejs.org./api/function/methodize" rel="alternate" type="text/html"/>
    <title>methodize</title>
<summary type="html">&lt;pre&gt;&lt;code class=&quot;ebnf&quot;&gt;someFunction.methodize() -&gt; Function&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Takes a function and wraps it in another function that, at call time, pushes &lt;code&gt;this&lt;/code&gt; to the original function as the first argument.&lt;/p&gt;</summary><content type="html">
            &lt;pre&gt;&lt;code class=&quot;ebnf&quot;&gt;someFunction.methodize() -&gt; Function&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Takes a function and wraps it in another function that, at call time, pushes &lt;code&gt;this&lt;/code&gt; to the original function as the first argument.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;methodize&lt;/code&gt; method transforms the original function that has an explicit first argument to a function that passes &lt;code&gt;this&lt;/code&gt; (the current context) as an implicit first argument at call time. It is useful when we want to transform a function that takes an object to a method of that object or its prototype, shortening its signature by one argument.&lt;/p&gt;

&lt;h3&gt;Examples&lt;/h3&gt;

&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;// start off with a simple function that does an operation
// on the target object:
var fn = function(target, foo) {
  target.value = foo;
};

var object = {};

// use the original function
fn(object, 'bar');
object.value //-&gt; 'bar'

// if we methodize it and copy over to the object, it becomes
// a method of the object and takes 1 argument less:
object.fnMethodized = fn.methodize();
object.fnMethodized('boom!');
object.value //-&gt; 'boom!'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Of course, usage shown in the example is rarely useful. It's more useful to copy methodized functions to object prototypes so that new methods are immediately shared among instances. In Prototype library, &lt;code&gt;methodize&lt;/code&gt; has important usage in DOM and Event modules; &lt;a href=&quot;/api/element/methods&quot;&gt;&lt;code&gt;Element.Methods&lt;/code&gt;&lt;/a&gt; and &lt;code&gt;Event.Methods&lt;/code&gt; are methodized and placed in their native prototypes so that they are available on DOM nodes and event objects, respectively.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://prototypejs.org./">
    <author>
      <name>Mislav</name>
    </author>
    <id>tag:prototypejs.org.,2008-01-08:18686</id>
    <published>2008-01-08T23:14:00Z</published>
    <updated>2008-01-09T00:03:57Z</updated>
    <category term="Function"/>
    <category term="1.6"/>
    <link href="http://prototypejs.org./api/function/argumentNames" rel="alternate" type="text/html"/>
    <title>argumentNames</title>
<summary type="html">&lt;pre&gt;&lt;code class=&quot;ebnf&quot;&gt;someFunction.argumentNames() -&gt; Array&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Reads the argument names as defined in the function definition and returns the values as an array of strings, or an empty array if the function is defined without parameters.&lt;/p&gt;</summary><content type="html">
            &lt;pre&gt;&lt;code class=&quot;ebnf&quot;&gt;someFunction.argumentNames() -&gt; Array&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Reads the argument names as defined in the function definition and returns the values as an array of strings, or an empty array if the function is defined without parameters.&lt;/p&gt;
&lt;h3&gt;Examples&lt;/h3&gt;

&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;var fn = function(foo, bar) {
  return foo + bar;
};
fn.argumentNames(); //-&gt; ['foo', 'bar']

Prototype.emptyFunction.argumentNames(); //-&gt; []
&lt;/code&gt;&lt;/pre&gt;
          </content>  </entry>
  <entry xml:base="http://prototypejs.org./">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:prototypejs.org.,2007-11-02:17734</id>
    <published>2007-11-02T19:03:00Z</published>
    <updated>2007-11-02T19:04:28Z</updated>
    <category term="Function"/>
    <category term="1.6.0"/>
    <link href="http://prototypejs.org./api/function/wrap" rel="alternate" type="text/html"/>
    <title>wrap</title>
<summary type="html">&lt;pre&gt;&lt;code class=&quot;ebnf&quot;&gt;wrap(wrapperFunction[, arg...]) -&gt; Function&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Returns a function &#8220;wrapped&#8221; around the original function.&lt;/p&gt;</summary><content type="html">
            &lt;pre&gt;&lt;code class=&quot;ebnf&quot;&gt;wrap(wrapperFunction[, arg...]) -&gt; Function&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Returns a function &#8220;wrapped&#8221; around the original function.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Function#wrap&lt;/code&gt; distills the essence of &lt;a href=&quot;http://en.wikipedia.org/wiki/Aspect-oriented_programming &#8220;Aspect-oriented programming - Wikipedia, the free encyclopedia&#8221;&quot;&gt;aspect-oriented programming&lt;/a&gt; into a single method, letting you easily build on existing functions by specifying before and after behavior, transforming the return value, or even preventing the original function from being called.&lt;/p&gt;

&lt;h3&gt;Examples&lt;/h3&gt;

&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;
String.prototype.capitalize = String.prototype.capitalize.wrap( 
  function(proceed, eachWord) { 
    if (eachWord &amp;&amp; this.include(&quot; &quot;)) {
      // capitalize each word in the string
      return this.split(&quot; &quot;).invoke(&quot;capitalize&quot;).join(&quot; &quot;);
    } else {
      // proceed using the original function
      return proceed(); 
    }
  }); 

&quot;hello world&quot;.capitalize()     // &quot;Hello world&quot; 
&quot;hello world&quot;.capitalize(true) // &quot;Hello World&quot;
&lt;/code&gt;&lt;/pre&gt;
          </content>  </entry>
  <entry xml:base="http://prototypejs.org./">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:prototypejs.org.,2007-11-02:17733</id>
    <published>2007-11-02T18:56:00Z</published>
    <updated>2007-11-02T19:04:59Z</updated>
    <category term="Function"/>
    <category term="1.6.0"/>
    <link href="http://prototypejs.org./api/function/defer" rel="alternate" type="text/html"/>
    <title>defer</title>
<summary type="html">&lt;pre&gt;&lt;code class=&quot;ebnf&quot;&gt;defer(arg...) -&gt; Number&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Schedules the function to run as soon as the interpreter is idle.&lt;/p&gt;</summary><content type="html">
            &lt;pre&gt;&lt;code class=&quot;ebnf&quot;&gt;defer(arg...) -&gt; Number&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Schedules the function to run as soon as the interpreter is idle.&lt;/p&gt;
&lt;p&gt;A &#8220;deferred&#8221; function will not run immediately; rather, it will run as soon as the interpreter&#8217;s call stack is empty.&lt;/p&gt;

&lt;p&gt;Behaves much like &lt;a href=&quot;http://developer.mozilla.org/en/docs/DOM:window.setTimeout&quot;&gt;&lt;code&gt;window.setTimeout&lt;/code&gt;&lt;/a&gt; with a delay set to &lt;code&gt;0&lt;/code&gt;. Returns an ID that can be used to clear the timeout with &lt;a href=&quot;http://developer.mozilla.org/en/docs/DOM:window.clearTimeout&quot;&gt;&lt;code&gt;window.clearTimeout&lt;/code&gt;&lt;/a&gt; before it runs.&lt;/p&gt;

&lt;h3&gt;Examples&lt;/h3&gt;

&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;
function hideNewElement() {
  $('inserted').hide();
};

function insertThenHide(markup) {
  $('container').insert(markup);

  // IE needs a moment to add the new markup
  // to the DOM tree
  hideNewElement.defer();
}

insertThenHide(&quot;&amp;lt;div id='inserted'&amp;gt;Lorem ipsum&amp;lt;/div&amp;gt;&quot;);  
&lt;/code&gt;&lt;/pre&gt;
          </content>  </entry>
  <entry xml:base="http://prototypejs.org./">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:prototypejs.org.,2007-11-02:17732</id>
    <published>2007-11-02T18:45:00Z</published>
    <updated>2007-11-02T18:47:34Z</updated>
    <category term="Function"/>
    <category term="1.6.0"/>
    <link href="http://prototypejs.org./api/function/delay" rel="alternate" type="text/html"/>
    <title>delay</title>
<summary type="html">&lt;pre&gt;&lt;code class=&quot;ebnf&quot;&gt;delay(seconds[, arg...]) -&gt; Number&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Schedules the function to run after the specified amount of time, passing any arguments given.&lt;/p&gt;</summary><content type="html">
            &lt;pre&gt;&lt;code class=&quot;ebnf&quot;&gt;delay(seconds[, arg...]) -&gt; Number&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Schedules the function to run after the specified amount of time, passing any arguments given.&lt;/p&gt;
&lt;p&gt;Behaves much like &lt;a href=&quot;http://developer.mozilla.org/en/docs/DOM:window.setTimeout&quot;&gt;&lt;code&gt;window.setTimeout&lt;/code&gt;&lt;/a&gt;. Returns an ID that can be used to clear the timeout with &lt;a href=&quot;http://developer.mozilla.org/en/docs/DOM:window.clearTimeout&quot;&gt;&lt;code&gt;window.clearTimeout&lt;/code&gt;&lt;/a&gt; before it runs.&lt;/p&gt;

&lt;p&gt;To schedule a function to run as soon as the interpreter is idle, use &lt;a href=&quot;/api/function/defer&quot;&gt;&lt;code&gt;Function#defer&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Examples&lt;/h3&gt;

&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;
// before:
window.setTimeout(function() {
 Element.addClassName('foo', 'bar'); }, 1000);

// after:
Element.addClassName.delay(1, 'foo', 'bar');


// clearing a timeout
var id = Element.hide.delay(5, 'foo');
window.clearTimeout(id);
&lt;/code&gt;&lt;/pre&gt;
          </content>  </entry>
  <entry xml:base="http://prototypejs.org./">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:prototypejs.org.,2007-11-02:17731</id>
    <published>2007-11-02T18:36:00Z</published>
    <updated>2007-11-02T18:37:55Z</updated>
    <category term="Function"/>
    <category term="1.6.0"/>
    <link href="http://prototypejs.org./api/function/curry" rel="alternate" type="text/html"/>
    <title>curry</title>
<summary type="html">&lt;pre&gt;&lt;code class=&quot;ebnf&quot;&gt;
  curry(arg...) -&gt; Function
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Partially applies the function, returning a function with one or more arguments already &#8220;filled in.&#8221;&lt;/p&gt;</summary><content type="html">
            &lt;pre&gt;&lt;code class=&quot;ebnf&quot;&gt;
  curry(arg...) -&gt; Function
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Partially applies the function, returning a function with one or more arguments already &#8220;filled in.&#8221;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Function#curry&lt;/code&gt; works just like &lt;a href=&quot;/api/function/bind&quot;&gt;&lt;code&gt;Function#bind&lt;/code&gt;&lt;/a&gt; without the initial scope argument.&lt;/p&gt;

&lt;h3&gt;Examples&lt;/h3&gt;

&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;
String.prototype.splitOnSpaces = String.prototype.split.curry(&quot; &quot;);
&quot;foo bar baz thud&quot;.splitOnSpaces(); //-&gt; [&quot;foo&quot;, &quot;bar&quot;, &quot;baz&quot;, &quot;thud&quot;]
&lt;/code&gt;&lt;/pre&gt;
          </content>  </entry>
  <entry xml:base="http://prototypejs.org./">
    <author>
      <name>Justin</name>
    </author>
    <id>tag:prototypejs.org.,2006-12-05:12749</id>
    <published>2006-12-05T21:46:00Z</published>
    <updated>2007-02-07T17:11:53Z</updated>
    <category term="Function"/>
    <link href="http://prototypejs.org./api/function" rel="alternate" type="text/html"/>
    <title>Function</title>
<content type="html">
            &lt;p&gt;Prototype takes issue with only one aspect of functions: &lt;strong&gt;binding&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;What is binding?&lt;/h3&gt;

&lt;p&gt;&#8220;Binding&#8221; basically determines the meaning, when a function runs, of the &lt;strong&gt;&lt;code&gt;this&lt;/code&gt;&lt;/strong&gt; keyword.  While there usually is a proper default binding (&lt;code&gt;this&lt;/code&gt; refers to whichever object the method is called on), this can be
&#8220;lost&#8221; sometimes, for instance when passing a function reference as an argument.&lt;/p&gt;

&lt;p&gt;If you don&#8217;t know much about the &lt;code&gt;this&lt;/code&gt; keyword in JavaScript, hop to the docs for the &lt;a href=&quot;function/bind&quot;&gt;&lt;code&gt;bind()&lt;/code&gt;&lt;/a&gt; method. The examples there will clear it up.&lt;/p&gt;

&lt;h3&gt;Prototype to the rescue!&lt;/h3&gt;

&lt;p&gt;Prototype solves this.  You&#8217;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.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://prototypejs.org./">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:prototypejs.org.,2006-11-18:12494</id>
    <published>2006-11-18T18:03:00Z</published>
    <updated>2007-06-25T15:15:34Z</updated>
    <category term="Function"/>
    <link href="http://prototypejs.org./api/function/bindAsEventListener" rel="alternate" type="text/html"/>
    <title>bindAsEventListener</title>
<summary type="html">&lt;pre&gt;&lt;code class=&quot;ebnf&quot;&gt;bindAsEventListener(thisObj[, arg...]) -&gt; Function&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;An event-specific variant of &lt;a href=&quot;/api/function/bind&quot;&gt;&lt;code&gt;bind&lt;/code&gt;&lt;/a&gt; which makes sure the function will recieve the current event object as the first argument when executing.&lt;/p&gt;</summary><content type="html">
            &lt;pre&gt;&lt;code class=&quot;ebnf&quot;&gt;bindAsEventListener(thisObj[, arg...]) -&gt; Function&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;An event-specific variant of &lt;a href=&quot;/api/function/bind&quot;&gt;&lt;code&gt;bind&lt;/code&gt;&lt;/a&gt; which makes sure the function will recieve the current event object as the first argument when executing.&lt;/p&gt;
&lt;p&gt;If you&#8217;re unclear on what &#8220;binding&#8221; is, check out &lt;code&gt;Function&lt;/code&gt;&#8217;s &lt;a href=&quot;/api/function&quot;&gt;API page&lt;/a&gt;.  If you don&#8217;t quite understand what &lt;a href=&quot;/api/function/bind&quot;&gt;&lt;code&gt;bind()&lt;/code&gt;&lt;/a&gt; does, check out its specific article.&lt;/p&gt;

&lt;p&gt;When you&#8217;re creating methods that you want to use as event handlers, you need to get the current event somehow, as well as control the &lt;em&gt;context&lt;/em&gt; in which the method will run. &lt;code&gt;bindAsEventListener&lt;/code&gt; takes care of both, as it binds the handler to the specified context (&lt;code&gt;thisObj&lt;/code&gt;) and makes sure the event object gets passed to the handler when the event actually occurs.&lt;/p&gt;

&lt;p&gt;This method also works around the problem in MSIE when using DOM level 0 style of event handling and the event object &lt;em&gt;isn&#8217;t&lt;/em&gt; passed as the first argument, but has to be read from &lt;code&gt;window.event&lt;/code&gt; instead. You can forget about that with this method as you don&#8217;t have to do it manually.&lt;/p&gt;

&lt;p&gt;You typically use this method in conjunction with &lt;a href=&quot;/api/event/observe&quot;&gt;&lt;code&gt;Event.observe&lt;/code&gt;&lt;/a&gt;, and anywhere you need to pass a method as an event listener.&lt;/p&gt;

&lt;h3&gt;Example&lt;/h3&gt;

&lt;p&gt;Here is a consolidated example:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;
var obj = { name: 'A nice demo' };

function handler(e) {
  var tag = Event.element(e).tagName.toLowerCase();
  var data = $A(arguments);
  data.shift();
  alert(this.name + '\nClick on a ' + tag + '\nOther args: ' + data.join(', '));
}

Event.observe(document.body, 'click', handler.bindAsEventListener(obj, 1, 2, 3));
// Now any click on the page displays obj.name, the lower-cased tag name
// of the clicked element, and &quot;1, 2, 3&quot;.
&lt;/code&gt;&lt;/pre&gt;
          </content>  </entry>
  <entry xml:base="http://prototypejs.org./">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:prototypejs.org.,2006-11-18:12493</id>
    <published>2006-11-18T18:02:00Z</published>
    <updated>2007-07-21T08:43:46Z</updated>
    <category term="Function"/>
    <link href="http://prototypejs.org./api/function/bind" rel="alternate" type="text/html"/>
    <title>bind</title>
<summary type="html">&lt;pre&gt;&lt;code class=&quot;ebnf&quot;&gt;bind(thisObj[, arg...]) -&gt; Function&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Wraps the function in another, locking its execution scope to an object specified by &lt;code&gt;thisObj&lt;/code&gt;.&lt;/p&gt;</summary><content type="html">
            &lt;pre&gt;&lt;code class=&quot;ebnf&quot;&gt;bind(thisObj[, arg...]) -&gt; Function&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Wraps the function in another, locking its execution scope to an object specified by &lt;code&gt;thisObj&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;As discussed on the &lt;a href=&quot;/api/function&quot;&gt;general &lt;code&gt;Function&lt;/code&gt; page&lt;/a&gt;, binding can be a pretty tricky thing for a newcomer, but it generally is a very simple concept. It requires the basic understanding of the JavaScript language.&lt;/p&gt;

&lt;p&gt;In JavaScript, functions are executed in a specific context (often referred to as &#8220;scope&#8221;). &lt;strong&gt;Inside the function the &lt;code&gt;this&lt;/code&gt; keyword becomes a reference to that scope.&lt;/strong&gt; Since every function is in fact a property of some object&#8212;global functions are properties of the &lt;code&gt;window&lt;/code&gt; object&#8212;the execution scope is the object from which the function was called, or (more precisely) the object that holds a reference to the function:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;
window.name = &quot;the window object&quot;

function scopeTest() {
  return this.name
}

// calling the function in global scope:
scopeTest()
// -&gt; &quot;the window object&quot;

var foo = {
  name: &quot;the foo object!&quot;,
  otherScopeTest: function() { return this.name }
}

foo.otherScopeTest()
// -&gt; &quot;the foo object!&quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Because of the dynamic nature of the language, we can&#8217;t be sure that, for instance, &lt;code&gt;otherScopeTest()&lt;/code&gt; will always be called on our &lt;code&gt;foo&lt;/code&gt; object. The reference to it can be copied somewhere else, like on the &lt;code&gt;window&lt;/code&gt; object:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;
// ... continuing from the last example

// note that we aren't calling the function, we're simply referencing it
window.test = foo.otherScopeTest
// now we are actually calling it:
test()
// -&gt; &quot;the window object&quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The last call demonstrates how the same function can behave differently depending on its execution scope.&lt;/p&gt;

&lt;p&gt;When you begin passing around function references in your code, you often want them to become fixated on a specific scope. Prototype can guarantee that your function will execute with the object you want under the &lt;code&gt;this&lt;/code&gt; keyword just by invoking &lt;code&gt;bind&lt;/code&gt; on it. You can also save the returned function and use it multiple times if you need so.&lt;/p&gt;

&lt;h3&gt;Examples&lt;/h3&gt;

&lt;p&gt;The code below is simply proof-of-concept:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;
var obj = {
  name: 'A nice demo',
  fx: function() {
    alert(this.name);
  }
};

window.name = 'I am such a beautiful window!';

function runFx(f) {
  f();
}

var fx2 = obj.fx.bind(obj);

runFx(obj.fx);
runFx(fx2);
&lt;/code&gt;&lt;/pre&gt;

&amp;lt;form style=&quot;margin: 1em 0;&quot;&gt;
  &amp;lt;input type=&quot;button&quot; id=&quot;btnBindDemo&quot; value=&quot;Try it out!&quot; /&gt;
&amp;lt;/form&gt;

&lt;p&gt;Now, what few people realize is, &lt;code&gt;bind&lt;/code&gt; can also be used to prepend arguments to the final argument list:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;
var obj = {
  name: 'A nice demo',
  fx: function() {
    alert(this.name + '\n' + $A(arguments).join(', '));
  }
};

var fx2 = obj.fx.bind(obj, 1, 2, 3);
fx2(4, 5); // Alerts the proper name, then &quot;1, 2, 3, 4, 5&quot;
&lt;/code&gt;&lt;/pre&gt;

&amp;lt;form style=&quot;margin: 1em 0;&quot;&gt;
  &amp;lt;input type=&quot;button&quot; id=&quot;btnBindArgsDemo&quot; value=&quot;Try it out!&quot; /&gt;
&amp;lt;/form&gt;

&lt;h3&gt;Not yet clear enough?&lt;/h3&gt;

&lt;p&gt;OK, try &lt;a href=&quot;http://www.encytemedia.com/blog/articles/2007/7/18/javascript-scope-and-binding&quot;&gt;Justin&#8217;s sweet article explaining function binding&lt;/a&gt;.&lt;/p&gt;
          </content>  </entry>
</feed>
