JavaScriptのthisについて基本中の基本
JavaScriptより先にPythonを学んだ自分にとって、thisはよくわからない存在だった。いや、使い方はわかるんだけど、なんていうかしっくりこない。
それから以下のようなコードがエラーになる理由もよくわからない。
var w = document.write; w('hello world'); // TypeError
「コーディングを支える技術」という本を読んでいたら、こういう説明があった(P.200)。
thisは予約語で、ある関数my_methodがあるオブジェクトobjと組み合わされてobj.my_method()という形で呼ばれた場合に、my_method本体の中でobjを参照するのに使います。
あー、なるほど。ようするにこういうことか↓
function set_value(value) { this.value = value; } var obj1 = {func : set_value}; obj1.func('bar'); console.log(obj1.value); var obj2 = {func : set_value}; obj2.func('baz'); console.log(obj2.value); set_value('foo'); console.log(window.value);
この説明が一番しっくりきたわ。最初にこれが聞きたかった。「javascript this」でググって出てくる文章は、ルールの細則にすぎない。
なんで、こういう説明がないのか3秒ほど考えてみたけど、たぶん日本にはPython→JavaScriptという順番で覚える人が少ないんだろうなという結論に達した。