• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:thisとvar ?)

thisとvarでの変数宣言の違いなど教えていただけないでしょうか?

このQ&Aのポイント
  • コンストラクタ(プロトタイプ)では、関数内にthisで変数宣言し、クロージャではvarで変数宣言する。
  • コンストラクタ(プロトタイプ)において、thisで宣言された変数はインスタンス化されたオブジェクトのメンバー変数としてアクセス可能であり、varで宣言された変数はプライベート変数として機能する。
  • クロージャでは、varで宣言された変数はクロージャ内部でのみアクセス可能であり、外部からのアクセスは制限される。また、varで宣言された変数はプライベート変数として機能する。

質問者が選んだベストアンサー

  • ベストアンサー
  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.1

JavaScript において "this.名前" は「コンテキストオブジェクト」にプロパティを生成する構文です "var 名前" は「関数スコープ」に変数を生成する構文です プロパティは、対象のオブジェクトさえ分かれば、何れのスコープからでも参照できます 関数スコープの変数は、同一スコープまたは変数を束縛したクロージャーからのみ見えます この違いを利用して、オブジェクト指向のカプセル化を表現するために、 * public メンバなら this.名前 * private メンバなら var 名前 * private へのgetter/setterなら クロージャー を使うことが多いです。 例: function Person(n,a) { this.name = n; // public var age = a; // private this.getAge = function(){return (age>17)? 17: age}; // getter } var o = new Person('花子',29); alert(o.name); // 花子 alert(o.age); // undefined alert(o.getAge()); // 17

hp_win7
質問者

お礼

ご回答ありがとうございます。 とても分かりやすく助かりました。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.2

「thisで変数宣言」? this.name = n; をnameという変数の宣言だと思っているのでしょうか?それは間違いです。 これは、プロパティーの設定です。 もし、これが変数宣言であると書いてあるような入門書を読んでいるなら、その本は捨てた方が良いと思いますよ。 プロパティについて調べると違いがわかるかと思います。

hp_win7
質問者

お礼

ご回答ありがとうございます。 大きな勘違いをしていたようです。 助かりました

関連するQ&A