コンテンツにスキップ

JavaScript/Function/prototype/bind

出典: フリー教科書『ウィキブックス(Wikibooks)』

Function.prototype.bind() は、指定された this 値と引数を事前に設定した新しい関数を生成するメソッドです。このメソッドは、関数の実行コンテキストを固定し、部分的に引数を適用するために使用されます[1]

構文

[編集]
func.bind(thisArg[,arg1[,arg2[,...]]])
  • func: バインドする対象の関数。
  • thisArg: 新しい関数内で this として参照される値。
  • arg1, arg2, ...: 新しい関数に事前に適用する引数(省略可能)。

[編集]

this を固定した関数を生成するプログラム

[編集]

以下のプログラムは、Function.prototype.bind() を使用して this を固定した新しい関数を生成します。

constperson={name:'Alice',greet:function(message){console.log(`${message}, ${this.name}!`);}};constanotherPerson={name:'Bob'};constboundGreet=person.greet.bind(anotherPerson);boundGreet('Hello');// "Hello, Bob!"

このプログラムでは、person.greet メソッドの thisanotherPerson に固定した新しい関数 boundGreet を生成しています。これにより、boundGreet を呼び出すと、this.nameBob を参照します。

引数を事前に適用した関数を生成するプログラム

[編集]

以下のプログラムは、Function.prototype.bind() を使用して引数を事前に適用した新しい関数を生成します。

functionsum(a,b,c){returna+b+c;}constaddFive=sum.bind(null,2,3);console.log(addFive(5));// 10

このプログラムでは、sum 関数の最初の2つの引数を 23 に固定した新しい関数 addFive を生成しています。これにより、addFive(5) を呼び出すと、2 + 3 + 5 が計算されます。

注意点

[編集]
  • thisArg の挙動: thisArgnullundefined の場合、非厳格モードでは this はグローバルオブジェクト(ブラウザでは window)に置き換えられます。厳格モードでは nullundefined がそのまま this として使用されます。
  • 引数の部分適用: bind() は、関数の引数を部分的に適用することができます。これにより、カリー化や部分適用を実現することができます。
  • 新しい関数の生成: bind() は、元の関数を変更せずに新しい関数を生成します。生成された関数は、this と引数が固定された状態で呼び出されます。
  • パフォーマンス: bind() は、新しい関数を生成するため、頻繁に使用するとメモリ使用量が増加する可能性があります。パフォーマンスが重要な場面では、他の方法(例えばアロー関数やクロージャ)を検討することが推奨されます。

脚註

[編集]
  1. ^これは、関数の this 値を固定し、カリー化や部分適用を実現するために使用されます。

外部リンク

[編集]


close