動的なscriptタグの読み込みを同期的に行う
http://blog.37to.net/2008/08/script/
発端:javascript の動的読込みで依存関係に考慮するのって・・・
結局、読込み成功に対して処理をすると言う基本的なアルゴリズムには変わりがないんですよね。それでも敢えてコメントしたのは、依存を考慮するためにあの形式にしているような印象を受けたからです。なので、私の方のブログには「書き方で対処できる」とした訳です。
つまり、メソッドチェーンやタグ入れ込み、関数かクラスかは枝葉であって、私としては関心が薄かったんですね。でもせっかくなので、クラス風の定義無しでのメソッドチェーンを自分のブログでUP。
ちなみに。インデントが深くなるということですが、実際の処理が直列でない以上、インデントの深さは実際の実行や意味(成功時に起動するという)により則した表現だとも思う。なによりコールバックの直接記述で複雑なコードを入れ込まれる事を抑止できるというのは、ついやってしまう私としては大きい(笑)
結局、読込み成功に対して処理をすると言う基本的なアルゴリズムには変わりがないんですよね。それでも敢えてコメントしたのは、依存を考慮するためにあの形式にしているような印象を受けたからです。なので、私の方のブログには「書き方で対処できる」とした訳です。
つまり、メソッドチェーンやタグ入れ込み、関数かクラスかは枝葉であって、私としては関心が薄かったんですね。でもせっかくなので、クラス風の定義無しでのメソッドチェーンを自分のブログでUP。
ちなみに。インデントが深くなるということですが、実際の処理が直列でない以上、インデントの深さは実際の実行や意味(成功時に起動するという)により則した表現だとも思う。なによりコールバックの直接記述で複雑なコードを入れ込まれる事を抑止できるというのは、ついやってしまう私としては大きい(笑)
まず、あまり良くない(と思われる)例
function info(v){
alert(v);
return this;
}
info(1).info(2).info(3);// 1 // 2 // 3
alert(v);
return this;
}
info(1).info(2).info(3);// 1 // 2 // 3
メソッドチェーン?になっている。この時返されている this は window。
javascript ってホント、シンプルで徹底している。なんというか、美しくて柔軟。
関数だってオブジェクト。じゃあ、それに則ってオブジェクトをそのまま記述してしまえば?
info = {
buffer : [],
push : function (dat){
this.buffer.push(dat);
return this;
},
flush : function (){
alert(this.buffer);
return this;
}
}
info.push(1).push(2).push(3).flush();// 1,2,3
buffer : [],
push : function (dat){
this.buffer.push(dat);
return this;
},
flush : function (){
alert(this.buffer);
return this;
}
}
info.push(1).push(2).push(3).flush();// 1,2,3
当たり前の事だけど、メソッドチェーンになる。
クラス風の定義って javascript の場合 new 演算子の利点がかなりのウェイトを占めていて、新しいオブジェクトが作られる(ちなみに別のオブジェクトを返す事もできる)って所ではないかと思う。
つまり、ほとんどの場合オブジェクト(インスタンス)1つあれば事足りるような処理の場合は、オブジェクトを直に記述した方が良いと考えてるがその辺りはどうなんだろう。プロトタイプチェーンを欠点と考える人(in には hasOwnProperty デフォだとか)は特に「クラス」から離れた方が良い気がする。ただし、ライブラリを作る際にクラスとしての記述が基準になっていれば、混在させるよりもクラスで書いた方が混乱は少ない。
まあ、javascript の場合、複数のインスタンスが必要でも prototype.js の extend や昔話題になった object 関数(inherit 関数)使えばオブジェクトの記述だけで済ませる事も。まあ思想次第だけども。
この記事へのコメント