時々見るcallとは?
JavaScriptのコードでcall()というメソッドを使うことがあります。これはどんな意味か?
公式の解説をそのまま引用すると以下のようになります。
「call()
は Function
インスタンスのメソッドで、 this
の値と、独立して提供された引数によって関数を呼び出します。」
これはあるオブジェクトを別のオブジェクトとして実行するメソッドです。index.jsを例に出すと、person オブジェクトには greet というメソッドがあります。このメソッドは this.a と this.b
を使って文字列を返します。
person.greet.call(hello) という行では、person の greet メソッドを呼び出していますが、call()
の最初の引数に hello オブジェクトが渡されています。
これにより、greet メソッド内の this は hello オブジェクトを指すことになります。
その結果、this.a は hello.a (“Hello”) に、this.b は hello.b (“田中さん”) になり、”Hello 田中さん”
という文字列が返されます。
同様に、person.greet.call(meet) では greet メソッド内の this が meet オブジェクトになるため、”MTG
鈴木さん” という文字列が返されます。
つまり、call()
を使うと、他のオブジェクトの機能を「借りてきて」自分のデータに対して実行する、といったことができます。