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