(- prototype.js ajax) ビジュアル系じゃないprototype.js (4)
(1) d:id:smeghead:20070307:1173247173
(2) d:id:smeghead:20070307:1173247453
(3) d:id:smeghead:20070310:prototype3
prototype.jsの地味な機能のソースをゆっくり読んでいます。
今日は、Arrayの拡張部分を読んで、メソッドを呼び出します。
EnumerableをArrayのprototypeに継承させています。
Object.extend(Array.prototype, Enumerable);
その後、いくつかメソッドを追加しています。
Array.clear
クリアはlengthに0を設定してるだけでした。
prototype.js
clear: function() { this.length = 0; return this; },
でもちゃんとクリアされているようでした。
var array1 = [1, 2, 3, 4]; array1.clear(); alert(array1[1]); //undefined
Array.first
最初の要素を返却する。
var array1 = [1, 2, 3, 4]; alert(array1.first()); //1
Array.last
最後の要素を返却する。
var array1 = [1, 2, 3, 4]; alert(array1.last()); //4
Array.compact
undefinedとnullの要素を削除した配列を返却する。
var undefinedVal; var array1 = [1, null, undefinedVal, 4]; alert(array1.compact()); //1, 4
Array.flatten
ネストした配列を1次元の配列に変換し返却する。
var array1 = [1, 2, 3, [4, 5, 6]]; alert(array1.length); //[1, 2, 3, [4, 5, 6]] alert(array1.flatten().length); //[1, 2, 3, 4, 5, 6]
Array.without
引数に指定した要素を除く配列を返却する。
var array1 = [1, 2, 3, 4, 5, 6]; alert(array1.without(2, 4, 6)); //1,3,5
Array.indexOf
引数に指定した要素が何番目に現れるかを返却する。現れない場合、-1を返却する。
var array1 = [1, 2, 3, 4, 5, 6]; alert(array1.indexOf(2)); //1
Array.reverse
配列を逆順に並び替えたものを返却する。
javascriptで見たことがない演算子を発見。!==
prototype.js
reverse: function(inline) { return (inline !== false ? this : this.toArray())._reverse(); },
厳密等価演算子というものらしい
http://js.tank.jp/javascript/post_9.html
暗黙の型変換を行わずに比較するようです。phpにそんなのがあったような気がしてましたが、別にphpが特殊ってわけではないようです。
reverseはもともと破壊的なメソッドということですね。引数にfalseを指定するとthisに対する変更は行わないようになる。
var array1 = [1, 2, 3, 4, 5, 6]; alert(array1.reverse(false)); //[6, 5, 4, 3, 2, 1] alert(array1); //[1, 2, 3, 4, 5, 6] array1.reverse(); alert(array1); //[6, 5, 4, 3, 2, 1]
Array.shift
perlのshift。最初の要素を取得し、最初の要素を削除する。
var array1 = [1, 2, 3, 4, 5, 6]; alert(array1.shift()); //1 alert(array1.shift()); //2 alert(array1.shift()); //3 alert(array1.shift()); //4 alert(array1.shift()); //5 alert(array1.shift()); //6 alert("length:" + array1.length); //length:0
なんで、popは定義しないのかと思ったら、IEで
alert([1].pop);
すると、既にあるようです。
function pop() { [native code] }
でも、prototype.jsを読み込まなくてもshiftもある。
alert([1].shift);
function shift() { [native code] }
popしかないブラウザがあってその対応のために、prototype.jsでは、shiftを上書きするということなんだろうか。
Array.inspect
検査する。
var array1 = [1, 2, 3, 4, 5, 6]; alert(array1.inspect());
まとめ
だんだんいい加減になってきているような気が。。
Arrayクラスは終了。次は、Hashクラス。