![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
javascript初心者です。
コンストラクタ(プロトタイプ)とクロージャを学んでいますが、
コンストラクタ(プロトタイプ)では、関数内にthisで変数宣言、クロージャはvarで宣言しています。
この違いの理由は何でしょうか?漠然とした質問ですみません。
thisとvarでの変数宣言の違いなど教えていただけないでしょうか?
コンストラクタ--------------------
function Person(n){
this.name = n;
}
Person.prototype.city = 'Tokyo';
Person.prototype.moveTo = function(c){
document.write(this.name + ': Moving to... ' + c + '<br>');
Person.prototype.city = c;
}
クロージャ-------------------
function Person(n, a){
var name = n;
var age = a;
return {
getName: function() {
return name;
},
setAge: function(i){
if( 0<= i ){
age = i;
}
},
getAge: function(){
return age;
}
}
}
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript gasについて 1 2022/05/31 21:51
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript JAVASCRIPT 2 2022/04/15 15:10
- JavaScript JavaScriptの即時関数の書き方 1 2022/11/29 09:52
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
idを使わずにonclickで自身の要...
-
関数でy=g(x)のgとは何の略です...
-
functionから別のfunctionを実...
-
XMLHttpRequestでキャッシュを...
-
ActiveXobjectが作成できない
-
二次元配列を使って順位をだす...
-
乗換案内 VBAで操作したい
-
javascriptの基本的なことだと...
-
window.openでタイトル名の指定
-
Boolean型配列中のTrueの有無を...
-
JavaScriptで、現在日時から100...
-
同じIDで定義した要素の配列を...
-
Googleスプレッドシートとスク...
-
DOM要素を削除しても、イベント...
-
【Tabキー】特定の範囲内だけで...
-
Javascriptで定期的にF5を押す...
-
<a>タグのテキストを取得
-
Click回数を数え、規定された回...
-
『名前空間』の意味を教えてく...
-
JavaScriptでの動的な多次元配...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数でy=g(x)のgとは何の略です...
-
idを使わずにonclickで自身の要...
-
functionから別のfunctionを実...
-
jslintのエラーについて質問
-
要素名がスペースを含む場合のj...
-
javascript(jQuery)でセル内...
-
ajax反映後のjqueryが動かない
-
jQueryの :not() .not() が有効...
-
getElementByIdを使用したグロ...
-
コードをスマートにさせたい。
-
クリックすると上に開くアコー...
-
jQueryの"return false"の役割...
-
jQueryが読み込めない
-
個別では動く、javascriptのエラー
-
一つのアクションで関数を二つ...
-
jqueryの変数を関数の外に出す方法
-
R言語
-
jQuery|:not(:animated)
-
即時関数でプライベート変数的...
-
スムーズに動く アニメーション...
おすすめ情報