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 件のコメント:
コメントを投稿