2014年5月30日金曜日

jajavascriptを再学習の5【javascriptのthis】


javascriptのthisはよくわからないっすよねー。
なにかというと、
【callの第一引数に文字列Objectを設定可能】
なのですよね。

前回のサンプルによると、
function foreacher(list,callback){
 for(var w=0;w<list.length;w++){
  callback.call(list[w],w);
 }
}
var waza=["背負投","払腰","袖釣込腰","内股すかし","出足払い"];
foreacher(waza,
 function(idx){
  assert(this == waza[idx],waza[idx]);
 }
);
なんてことを書いてるわけですが。。
よくthisって何かって説明で、
【自分自身を表すObject】みたいに書いてあります。
まったくその通りなんですが、、、
サンプルを見てみると、、
waza[idx]は明らかに文字列です。
typeof(waza[idx]) は"string"です。
でも、this == waza[idx]はtrueです。
でも、this === waza[idx]はfalseです。
まぁここまではよしとしましょう。
しかしながら、以下はどうでしょう。
●その1
var moji = {};
moji.abc = function(){alert("moji-abc");};
moji.abc();
これを実行すると、alertが出ます。当然の結果です。でも、、、
●その2
var moji = "moji";
moji.abc = function(){alert("moji-abc");};//1
moji.abc();//2
これを実行すると、エラーです。
ためしに、typeof(moji.abc)を見ると、undefinedです。
でも、1ではエラーでにはなりません。
2がエラーになります。そんな関数しらないよと。
1のときに、【文字列Objectにプロパティをい追加できません】とか出してエラーになってくれるといいんですけどね。

このthisはサンプルのようには使えますが、だからといってその"waza[idx]"に、プロパティとか設定できません。
そう、なんの使い道があるのでしょう。
謎です。

0 件のコメント:

コメントを投稿