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
■Perl で JavaScript の 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);