[実験]JavaScriptの神秘
このプログラムの 1-4の出力結果をそれぞれ答えなさい
function cl() {} cl.prototype.exe =function() { alert(this.val); } cl.prototype.test=function() { a=new cl(); a.val="a"; a.exe(); // 1 alert(this.val); // 2 var c=a.exe; c(); // 3 (a.exe)(); // 4 } val="t"; b=new cl(); b.val="b"; b.test();
答えは,a,b,t,a
なによりショッキングだったのは3 と 4の結果がちがうことだ.
自分が思っていたのは,
- this は世界に1個しかないレジスタである.
- a.exe() という書き方をされたときには, this=a として exeをよぶ
- c=a.exe; c(); の場合は,cはthisを変えずに呼ぶ.
しかし,最後の仮説はちがうみたい...ってc(); の結果が"t"ってどういう仕組みだろう..