(- 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クラス。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください