###わからないこと
コンストラクタ単位で保有される静的プロパティとコンストラクタの中で定義されるローカル変数の違いが分かりません。
同じ読み取り専用という点ではほぼ同じように思えます。
静的プロパティとローカル変数の両者で、機能的にここが違うという明確な部分を教えていただきたいです。
###コード
javascript
1let Test = function(test_name){ 2 //ローカル変数 3 let version = "1.0"; 4 let showVersion = function(){ 5 return `version${version}`; 6 } 7 //インスタンス変数 8 this.test_name = test_name; 9 this.name_and_version = function(){ 10 return `name is ${this.test_name} | ${showVersion()}`; 11 } 12} 13let test1 = new Test("test1"); 14console.log(test1.name_and_version()); 15/* 16出力: name is test1 | version1.0 17*/ 18 19/* 20クラス変数 21*/ 22Test.version = "2.0"; 23Test.showVersion = function(){ 24 return `version${Test.version}`; 25} 26console.log(Test.version); 27console.log(Test.showVersion()); 28/* 29出力: 2.0 30 version2.0 31*/
###追記
Testクラス内のversion(ローカル変数?)には、Testクラスのインスタンスtest1からアクセスできません。
Testクラスに追加した静的プロパティ(version2.0)にも、Testクラスのインスタンスtest1からアクセスできません。
同じようにアクセスできない(書き換えられない)ローカル変数と静的プロパティの違いが知りたいです。
何卒、ご回答のほどよろしくお願いいたします。
###ここが知りたい
・どちらもインスタンス自体から呼び出すことはできない
・どちらもインスタンスメソッド経由だと(コンストラクタ内だと)アクセスすることができる
この点を踏まえて、この両者は
①明確にどこが違うのか
②どう使い分けたら良いのか
が知りたいです。
javascript
1let Test = function(text){ 2 //ローカル変数 3 let local_value = "local value"; 4 let local_function = function(){ 5 return "local_function: " + local_value; 6 } 7 //インスタンス変数 8 this.text = text; 9 this.showText = function(){ 10 return "showText: " + this.text; 11 } 12 //インスタンス変数-ローカル変数local_functionを呼び出す 13 this.use_local_function = function(){ 14 return local_function(); 15 } 16 //インスタンス変数-静的プロパティstatic_functionを呼び出す 17 this.use_static_function = function(){ 18 return Test.static_function(); 19 } 20} 21//静的プロパティ 22Test.static_value = "static value"; 23Test.static_function = function(){ 24 return "static_function: " + Test.static_value; 25} 26 27let test_obj = new Test("test-text"); 28console.log(test_obj.showText()); //・・・インスタンスメソッドなので当然呼び出せる 29//console.log(test_obj.local_function()); ・・・ローカル変数なのでインスタンス経由で呼び出せない 30//console.log(test_obj.static_function()); ・・・静的プロパティなのでインスタンス経由で呼び出せない 31console.log(test_obj.use_local_function()); //・・・インスタンスメソッドを通してだとローカル変数にアクセスできる 32console.log(test_obj.use_static_function()); //・・・インスタンスメソッドを通してだと静的プロパティにアクセスできる
回答3件
あなたの回答
tips
プレビュー