素人がゴソゴソ作成中 -_-

jQueryって呼び出すとき、'jQuery(aaa).bbb(ccc)'と、いうような感じ。
使った事がないので分からないけれど(ォィ)前の部分がターゲットで、後ろの部分が動作と動作に対する引数なんだろうなぁ。たぶん今までの流れからいって動作部分はプロトタイプの中に書かれているんだろう・・・
で、ここで不思議に思ったのがjQueryを読み込んでいればいきなりjQuery~と書き出しても大丈夫なプログラムってどうやって作っているんだろうと言う事 ・。・ノ
という事で、関数の外からでも簡単に呼び出すことのできるプログラムを作ってみたいと思います。

何はともあれ、まずは関数を作らなくては・・・中身にメソッドチェーンを使えるように関数とプロトタイプを書いて・・・

var koonz = function(){
var target = function( ){
return this;
};
target.prototype = {
action : function( fu ){
alert( fu );
}
};
return this;
};
koonz();
target().action('成功!');

これで成功すれば'成功!'のアーラートが出るハズなんですが・・・でないですね。
targetは定義されていませんと言われます・・・さて、リターンディスも使ったのに困ったものです。
ここで小一時間ネットサーフィンをして情報収集。
どうやら、普段'document.getElement....'などで使われている物の前には省略してwindowというのが隠れているようです。ここに関数'target'があることを知らせてやる必要がありそうです。
なのでwindow.targetを呼び出されると関数targetを実行できるように追記して・・・

var koonz = function(){
var target = function( ){
return this;
};
target.prototype = {
action : function( fu ){
alert( fu );
}
};
window.target = target;
return this;
};
koonz();

target().action('成功!');

・・・失敗ですね。しかし、半分成功です。さっきとはエラー文の内容が変わりました。
'オブジェクトは'action'プロパティまたはメソッドをサポートしていません。' *。*!
このエラー文はメソッドチェーンの実験中に嫌というほど見てきました。つまり、window.(←省略できる)targetを呼ばれた時に関数targetが実行されるように書き足した文は、概ね成功したという事でしょう。
 さて、ここで悩まされたのがrerurn thisを使っているのにどうしてチェーンしないのかという事でした。
実験の結果、関数targetが実行されている事は分かったのですが、どうやら戻り値に何かが足りないようです。
結論から言うと'return target.prototype'で動きました。
実験途中の失敗プログラムがないのは大丈夫そうな戻り値を片っ端から書いていたためです -。-

var koonz = function(){
var target = function( ){
return target.prototype;
};
target.prototype = {
action : function( fu ){
alert( fu );
}
};
window.target = target;
return this;
};
koonz();

target().action('成功!');

これで無事、関数の外から簡単に呼び出せるプログラムが完成しました。
Category: プログラム

コメント

コメントの投稿

トラックバック