call/applyメソッドについて[Function]

2017年2月23日

call/applyメソッドは、全ての関数が持っているメソッドです(つまりFunctionオブジェクトにはcall/applyメソッドが存在する)。JavaScriptにおいてthisの参照先であるオブジェクトは基本的に実行時に決まりますが、call/applyメソッドを利用するとその実行時において、参照先の指定をすることできます。

 

スポンサーリンク

 

 

以下call/applyメソッドの機能を具体的に順を追って説明していきます。

 

まずはあらためてthisの参照先について簡単に説明します。

 

 

オブジェクトのメソッド内のthisは自身のオブジェクトを参照します。

 

3〜5行目

よってbookオブジェクト/getNameメソッド内のthisの参照先は、呼び出し元のオブジェクト(自身)であるbookオブジェクトとなります。つまり4行目のthis.titleは2行目のtitle(こころ)を参照します(this.titleはbook.titleと同じになります)。

 

関連ページ

thisキーワードについて

 

 

callメソッド


下記のコードにおいてcallメソッドを考えます。

 

 

8行目
titleプロパティを持つbook2オブジェクトです。

 

10行目
getNameメソッド(関数)のcallメソッドを実行しています。

 

第1引数にはthisの参照先にしたいオブジェクトを指定しています。ここではgetNameメソッド内のthisの参照先オブジェクトをbook2オブジェクトに指定しています。これによってgetNameメソッド内のthis.titleは、bookオブジェクトのtitle(こころ)ではなく、book2オブジェクトのtitle(人間失格)を参照するようになります。

 

第2引数にはgetNameメソッドの引数を指定しています。上記コードでは、太宰治がgetNameメソッドの引数nameに指定されています。

 

 

もしcallメソッドの第1引数にnullを指定すると、グローバルオブジェクト(Head Object)を参照したと見なされます。

 

 

10行目
第1引数にnullを指定すると、bookオブジェクト/getNameメソッド内のthisはグローバルオブジェクト(window)を参照するようになるので、this.titleはwindow.title、つまり1行目のtitle(ノルウェイの森)を指すようになります。

 

Strictモードの場合、nullを指定するとエラーとなります。

 

関連ページ

Strictモードについて

 

 

applyメソッド


 

applyメソッドは基本的にcallメソッドと同じ役割を持ちますが、第2引数以降には配列を指定します。

 

 

 

 

Copyright © 2017 ウェブの葉 All Rights Reserved.  プライバシーポリシー