JavaScript callメソッド

JavaScriptにcallメソッドがあります。直感的には理解しがたい不思議なメソッドです。
機能は「現在のオブジェクトの代わりに、他のオブジェクトを使用してメソッドを呼び出すもの」というらしい。 分かりにくいので下記のサンプルで示すと、関数hogeのthisにobjが一時的にセットされた状態で関数hogeが実行されていることになります。

var obj = {
  say: 'Hello'
}

function hoge(){
  $('<p> ' + this.say + '</p>').appendTo('#result');
}
hoge();             // 当然ですがundefinedが表示されます。
hoge(obj);          // これもundefinedが表示されます。
hoge.call(obj);     // thisに渡すオブジェクトを指定