質問: new Test("test-text"); console.log(test_obj.showText()); //・・・インスタンスメソッドなので当然呼び出せる //console.log(test_obj.local_function()); ・・・ローカル変数なのでインスタンス経由で呼び出せない //console.log(test_obj.static_function()); ・・・静的プロパティなのでインスタンス経由で呼び出せない console.log(test_obj.use_local_function()); //・・・インスタンスメソッドを通してだとローカル変数にアクセスできる console.log(test_obj.use_static_function()); //・・・インスタンスメソッドを通してだと静的プロパティにアクセスできる ```
回答: > > ただ、そうなると「インスタンスを経由して呼び出せない値」は、コンストラクタ内に記述したローカル変数(上記コードのversion=1.0とshowVersion)も同じではないのでしょうか。そこの違いといいますか、どう使い分けるのかが分からないのです。 > > > コンストラクタ内に記述したshowVersionは「静的プロパティ」ではなく「ローカル変数」です(上から4行目)。 クラス変数の下のTest.showVersionが「静的プロパティ」です。 同じ名前だから混同されたのでしょう。 静的プロパティという単語を見たことがありませんでしたが、静的プロパティで検索して理解できました。 https://ja.javascript.info/static-properties-methods どちらにせよ「同じ読み取り専用」という記述は間違っています。上書きできますので。 ``` let Test = function(test_name){ //コンストラクタ内に記述したローカル変数 let version = "1.0"; let showVersion = function(){ return `version${version}`; }; version = "2.0"; /* コンストラクタ内に記述したローカル変数versionを上書き */ showVersion = function(){ /* コンストラクタ内に記述したローカル変数showVersionを上書き */ return `VERSION${version}`; }; console.log(showVersion()); /* VERSION2.0を出力 */ } let test1 = new Test("test1"); ```