読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

Function#bind

prototype.jsをインポートすると追加される「Function#bind」を使うと、「関数とオブジェクトを関連づけた関数」を作成できます。

  • オブジェクトと関連づけられていない関数内では、thisはグローバルスコープとなりますが、
  • オブジェクトと関連づけられた関数では、thisは関連づけられたオブジェクトになります。
    • 「引数で指定したオブジェクトをレシーバーとして起動する関数にしたものを返します」、とかいった表現の方が適切かな?

サンプルは以下。

var out = document.getElementById( "out" );

// 内部でthisを使う関数。
// オブジェクトと関連づけずに実行するとグローバルスコープがthisになる。
var f = function( str ) {
  return this.x + ":" + str;
}


// prototype.jsをインポートすると追加されるFunction#bindを使うと
// 関数と引数で指定したオブジェクトを関連づけた関数を作成できる。
var f2 = f.bind({"x":"a"});

// このとき、メソッド内のthisは「関連づけたオブジェクト」になる。
out.innerHTML += f2("foo") + "<br/>"; // a:foo

f2 = f.bind({"x":"b"});
out.innerHTML += f2("var") + "<br/>"; // b:var

実行結果はこちら