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();
●その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]"に、プロパティとか設定できません。
そう、なんの使い道があるのでしょう。
謎です。