JavaScriptの関数オブジェクトを完璧に理解する
JavaScript関数の実体は、Functionクラスのオブジェクトです。今回はFunctionクラスの機能を網羅的に解説します。
前回までのおさらいと今回のあらすじ
前回は、thisキーワードについて深く解説しました。関数内で使用する「this」は、状況に応じて様々に変化する可能性がある、というお話でしたね。
これでやっと、JavaScriptの関数が持つ様々な機能を説明するための前提知識が整いました!
JavaScriptの関数については、当連載でも一度取り上げています。JavaScriptの関数は、単なる手続きの単位ではなくオブジェクトの一種なのだ、と言うことを取り上げたトピックでした。
そう、JavaScript関数の実体は、Functionクラスのオブジェクトです。Functionクラスには、関数を操るための様々なメソッドやプロパティが存在します。今回は、それらを網羅的に解説するとともに、関数内でのみ使用可能な「arguments」オブジェクトについてもお話ししたいと思います。
Functionクラスのメンバ
先ほども申し上げた通り、JavaScriptにおける関数とは、Functionクラスと言う組み込みクラスのオブジェクトです。
Functionクラスが持つメンバには以下のようなものがあります。
call()/apply()
Functionクラスには、call()とapply()と言うメソッドがあります。この二つのメソッドは、どちらも「関数呼び出し」を目的としており、引数の指定方法に違いがあります。
// apply()メソッドの定義 Function.prototype.apply (thisArg, argArray) // call()メソッドの定義 Function.prototype.call (thisArg [ , arg1 [ , arg2, … ] ] )
どちらも、第一引数は「thisArg」となっています。これは、関数内で使用するthisキーワードが指すオブジェクトです。もしthisArgにnullやundefinedを指定すると、関数内で使用するthisはグローバルオブジェクト(ブラウザ環境であればwindowオブジェクト)を指すことになります。
使用例を次に示します。まず、配列arrに要素を3つ追加し、表示する以下のようなプログラムがあったとします。
var arr = ["h", "e"];
// 配列に["l", "l", "o"]を追加
arr.push("l", "l", "o");
alert(arr.join()); // 結果は"h,e,l,l,o"
配列のpush()メソッドを呼び出して要素を追加している部分を、call()やapply()を使って書き直すと、以下のようになります。
// apply()を使う Array.prototype.push.apply(arr, ["l", "l", "o"]); // call()を使う Array.prototype.push.call(arr, "l", "l", "o");
- 特集: JavaScriptのイロハ (19件)
- ホワイトペーパー
- 企画特集
御社のログ活用しませんか!?
SOA、BPM、SaaS −今、企業に必要なこと
中小企業のセキュリティリスクとは?
【徹底対談】運用管理ツールの賢い使い方
仮想環境を実現するソリューション特集
今注目の「サジェスト検索」−デモ掲載中
ロリポップ!がリニューアル
◆エン・ジャパン厳選求人☆毎週更新◆
ストレージメディア特設サイト開設
集積度も性能も、業界最高水準のブレードPC
ESBでIT投資の無駄を劇的に解消する
セキュリティ&ユーザ事例【SIer Club】
パンデミック対策特集
インターネット上の悪意を未然に防ぐには?
そのストレージで仮想化に対応できますか?
- エンタープライズにおけるSUSEの強み
- サービス・ドリヴン・データセンター
- サーバー監視・運用のコストを削減するには
- ■ストレージ容量50%削減保証■
- 話題のタグ
Windows 7はLinuxへの切替が簡単:注目の仮想ディスクフォーマット「VHD」
iPhone OS 3.0で変わった「絵文字」
OSSのクラウド基盤「Eucalyptus」を使う(4)--インストール〜ノード構築
俳優経験者が指南する「人前で上手く話すためのティップス10選」
「うるまでるびペイント」登場:絵は上手下手ではなく制作過程に楽しみが
待てば回路の日和あり--「iPhone 3GS」発売、しかし――