Function.prototype.bindとfoo.bindは同じコードを参照していますか?
絶対!JavaScriptが関数型言語である、またはJSでは関数がファーストクラスのオブジェクトであるようなフレーズに出くわしたかもしれません。つまり、プロパティとメソッドのロジックは、他のオブジェクト(配列、日付、オブジェクトなど)
の場合と同じように、関数に適用されます。メインFunction
は、すべての関数が持つすべての基本的なプロパティとメソッドを定義するプロトタイプを保持します。新しい関数オブジェクトを各関数に割り当てるよりも、すべての関数オブジェクトが指す1つのオブジェクトに割り当てる方がはるかに効率的です。
これは、他の人がここで指摘しているように、次のことを意味します。
function foo()
{};
foo.bind === Function.prototype.bind;
ただし、これは、プロトタイプと個々の関数オブジェクトの両方を拡張できることも意味します。
Function.prototype.getName = function()
{
return this.name;
}
foo.getName();//foo
ここでも、foo.getName === Function.prototype.getName
単一の関数オブジェクトに直接割り当てると、次のようになります。
foo.getName = function(){ return 'bar';};
foo.getName !== Function.prototype.getName
関数プロトタイプを試してみて、それが各関数の動作に個別にどのように影響するかを試してみることは当然のことです。とても楽しいです;P