apply の使い方が何となく分かった

昨日は Kanasan.JS#2 に行って来ました。勉強会のテーマは prototype.js のソースリーディング。詳細はまた後ほどまとめたいと思います。今日は朝起きてから,昨日の勉強会で消化しきれなかった箇所を読んでます。

初級者の僕が偉そうに prototype.js の読み方について書くのは恐縮ですが,prototype.js を読んでいくのには,


Class.create
Class.Method
Object.extend
Function.prototype に extend される bind 関数


などを先に読んでおくと,その後のリーディング作業が早いんじゃないかと思いました。上に挙げた関数やオブジェクトは,prototype.js の重要なエッセンスが盛り込まれている箇所で,prototype.js のソース内で頻繁に呼ばれています。bind は,iterator の仕組みに使われているので,まず bind を読んでないと読めないと思います。きっと・・。


上記に挙げた以外のもので,昨日の勉強会では今ひとつ消化できなかった関数の apply について調べました。

■applyメソッド JavaScript辞典
http://www.seo-equation.com/html/javascript/apply


PerlJavaScript の apply っぽいやつ(IT戦記)
http://d.hatena.ne.jp/amachang/20061006/1160155952

ん〜,なるほど。hogehoge.apply(this, arguments) みたいにして hogehoge() を呼び出すと,実行時に hogehoge() 内の処理に対して this を与えられるのね。つまり,this の解釈を動的に変えられると・・。amachang の説明ですっきり。


http://www.seo-equation.com/html/javascript/apply のほうのサイトの説明で少し気になったのは,this を渡してもそれが呼び出した関数の処理で使われていなければ,わざわざ apply で呼び出す意味があるのか?ということです。どうなんでしょうか?


以下,apply の勉強に作ってみたソース。

function Hoge()
{
    this.name = "My name is hoge."
    this.test = function() {
        alert(this.name);
    }
}

function Hige()
{
    this.name = "My name is hige.";
}

var hoge = new Hoge();
var hige = new Hige();

hoge.test();
hoge.test.apply(hige);