javascriptでArray.prototype.push.applyとかを使う理由
- 2010年03月23日
- category:javascript
- Comment(0)
- Trackback(0)
jQueryのソースとで下記のような表記を見かけます。(1.4からは push = Array.prototype.push というエイリアスつくってますけど)
Array.prototype.push.apply( this, elems );
これはArray likeなオブジェクトを作るときに用いる手法なんですけど、そこら変はとりあえず置いておいて、なんでこれが
this.push( elems );
じゃダメなのかがわからなかったんですけど、検証してみたらすぐわかりました。
var obj = {};
obj.push('foo'); // => [error] obj.push is not a function
上記がエラーになるのに対して以下は成功します。
var obj = {};
Array.prototype.push.apply( obj, ['foo'] ); // obj => { 0: "foo", length: 1 }
objはObjectなのでArrayのメソッドであるpushをobjに対して実行しようとするとエラーになります。なのでメソッドでなくて関数として使用することでObjectに対してもpushを実行できるようにしてるってことなのかな。なんか黒魔術っぽくて気持ち悪いなあ。
Array likeなオブジェクトとかについては以下のエントリーが参考になります。
- Prev Entry
- gitで削除したファイルをまとめてインデックスに記録する
- Next Entry
- sub { my $arg = shift; } のshift
コメントフォーム
スパムがひどいので一時的にコメントフォーム閉じます。ゴメンナサイ。
