[お勉強] thisとvarの違いを考察〜Javascriptでオブジェクト指向
Javascriptでオブジェクト指向を実装してみるに当たって,thisとvarの違いを試してみた.
C++っぽく考えてみると,varはprotected変数で,thisは,動的に付け加えられるpublic変数といったところか.
このときおかしいなぁ・・・.と思えるのは,同じ変数名をvarとthisでそれぞれ利用できることだ.
this変数は,外部から変更およびアクセスが可能だが,varは,アクセス用のメソッドを用意することになる.
そう考えると,なんでわざわざvarを使う必要があるんだ・・・?ということになるがこれ以外に,私の試したところでは,コールバック的?なシーンでvarが使えるのだ.
<div id="canvas20070718-2" style="width:100px;height:100px;border-style:solid;border-width:thin;"> ここをクリックすると動作します. </div> <script src="./prototype.js"></script> <script> function hoge(){ var val1 = "val1"; this.val2 = "val2"; this.func = function () { alert( 'varで宣言した変数->' + val1 ); alert( 'thisで宣言した変数->' + this.val2 ); } } $('canvas20070718-2').onmousedown = function() { var obj = new hoge(); obj.func(); obj.val1 = "val1 modified"; obj.val2 = "val2 modified"; obj.func(); alert( '後から追加したことになった変数this.val1->' + obj.val1 ); var obj2 = new hoge(); obj2.func(); alert( '後から追加したことになった変数this.val1->' + obj2.val1 ); } </script>
以上のコードは,val1がvarの変数,val2がthisの変数ということになる.
objでは,thisではないval1にアクセスし,値を代入しようとしているように見えるが,これはobjにthis.val1を追加していることになる.(ということであってると思うのだが)
obj2には,thisを使いしていないので,undefinedになるというわけだ.(ということであってると思うのだが)
ここをクリックすると動作します.