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ランキング
-
関数でy=g(x)のgとは何の略です...
-
idを使わずにonclickで自身の要...
-
[Delphi]入れ子(?)になったプロ...
-
jQueryを使用して以下のような...
-
functionから別のfunctionを実...
-
ActiveXobjectが作成できない
-
JavaScriptで決まった「時刻」...
-
C#テキストボックスの文字を配...
-
Boolean型配列中のTrueの有無を...
-
google apps scriptの終了のさせ方
-
jspからjavascriptの変数引継ぎ
-
任意の座標をクリックさせるには
-
Linux バイナリ実行できない "...
-
javascriptでスロットゲームを...
-
window.openでタイトル名の指定
-
javascriptでiframeのURL変更は?
-
javascript 特定のタグのidの存...
-
翌月を取得するGASが分かりません
-
ASP.NETのコントロールの値をJa...
-
VSCODE[Python]の設定について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
functionから別のfunctionを実...
-
idを使わずにonclickで自身の要...
-
関数でy=g(x)のgとは何の略です...
-
jslintのエラーについて質問
-
jQueryの :not() .not() が有効...
-
クリックすると上に開くアコー...
-
jQueryのプラグイン「Skitter」...
-
関数名をテキストから読み込む...
-
小数点以下を5刻みで表示
-
XMLHttpRequestでキャッシュを...
-
jQueryでzipを解凍読み込みする...
-
Matlabで自作関数をオーバーロード
-
javascript(jQuery)でセル内...
-
要素名がスペースを含む場合のj...
-
ページ内に複数表がある場合のT...
-
処理前の「お待ちください」
-
JS 頭文字が大文字について
-
HTML5でファイルドラッグ&ドロ...
-
Javascriptリアルタイムエラー...
-
getElementByIdを使用したグロ...
おすすめ情報