JavaScriptのthis
クイズ
以下のスクリプトで:
<?xml version="1.0"?> <html> <body> <script language="JavaScript"> //<!--<![CDATA[ var name = "script"; document.write("in script: " + this.name + "<br />"); // 1 function func() { var name = "func"; document.write("in func:" + this.name + "<br />"); } func(); // 2 var obj = {}; obj.name = "object"; obj.func = func obj.func(); // 3 var Class1 = function () { this.name = "constructor"; this.func = func; }; var obj1 = new Class1(); obj1.func(); // 4 var Class2 = function () { }; Class2.prototype.name = "prototype"; Class2.prototype.func = func; var obj2 = new Class2(); obj2.func(); // 5 //]]>--> </script> </body> </html>
さて、コメントの位置の実行で、それぞれthis.nameは何になるでしょうか。
答え
- 1. "script"
- 2. "script"
- 3. "object"
- 4. "constructor"
- 5. "prototype"
JavaScriptのthisは実行コンテキストによって変化します。a.f()と呼んだ場合、thisはaになるような仕組みを持っています。
ちなみにscript要素直下でのthisはwindowです。そこでのローカル変数はwindowのメンバーになるようです。