Posted by lawrhino - 2007.07.06,Fri
Number型のprototypeを ruby を真似て拡張してみる。
指定回数、引数で受け取った処理を繰り返し
実行する関数だ。
これを
として呼び出そうと試みる。
・・・が syntax error となり実行できない。
しかし
と一度変数に代入すると上手くいく。
また
としても上手くいく。
という事は括弧で括り評価をしてやる事で初めて、
Number型オブジェクトになり、
変数に代入する場合は代入した時点で評価されるという事か。
他の基本型についても同様の実験をしてみた。
まぁこれは予想通りというか問題なく実行できた。
次にBoolean
数値と同じような位置付けに見えるけどこちらは
普通に実行できた。
さらに
も実行できた。
こうなると何故数値だけ??って疑問が。
そういう仕様なんだろうけどなんかしっくりこない仕様だなぁ。
追記:
その後、単純に数値の場合10.timesとしたらピリオドを小数点と判断するから
エラーになるだけだという事がわかった。
また他にも10..timesのように書く事も可能。
Number.prototype.times = function(iterator){
for(var i = 0; i < this; i++)
iterator(i);
}
指定回数、引数で受け取った処理を繰り返し
実行する関数だ。
これを
10.times(alert)
として呼び出そうと試みる。
・・・が syntax error となり実行できない。
しかし
var num = 10;
num.times(alert);
と一度変数に代入すると上手くいく。
また
(10).times(alert);
としても上手くいく。
という事は括弧で括り評価をしてやる事で初めて、
Number型オブジェクトになり、
変数に代入する場合は代入した時点で評価されるという事か。
他の基本型についても同様の実験をしてみた。
String.prototype.disp = function(){ alert(this) };
"Hello".disp();
まぁこれは予想通りというか問題なく実行できた。
次にBoolean
Boolean.prototype.disp = function(){ alert(this) }
true.disp();
数値と同じような位置付けに見えるけどこちらは
普通に実行できた。
さらに
RegExp.prototype.disp = function() { alert(this) }
/abcde/.disp();
も実行できた。
こうなると何故数値だけ??って疑問が。
そういう仕様なんだろうけどなんかしっくりこない仕様だなぁ。
追記:
その後、単純に数値の場合10.timesとしたらピリオドを小数点と判断するから
エラーになるだけだという事がわかった。
また他にも10..timesのように書く事も可能。
PR
Comments
Post a Comment
カレンダー
プロフィール
HN:
lawrhino
性別:
非公開
最新記事
忍者アド
最新TB
アクセス解析
Template by mavericyard*
Powered by "Samurai Factory"
Powered by "Samurai Factory"