JavaScript本格入門リスト5-31のclass_prop.jsについて

徒然草2.0

山田 祥寛.著 改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで。

JS本格入門
-5.5.1 クラスを定義する
-プロパティを定義する
-リスト5-31

class_prop.js

class Member {
	//コンストラクター
	constructor(firstName, lastName){
		this.firstName = firstName;
		this.lastName = lastName;
	}
	//firstNameプロパティ
	get firstName(){
		return this._firstName;
	}
	set firstName(value){
		this._firstName = value;
	}
	//lastNameプロパティ
	get lastName(){
		return this._lastName;
	}
	set lastName(value){
		this._lastName = value;
	}
	// 
	getName(){
		return this.lastName + this.firstName;
	}
}

これの意味って何か?と問われて、少し困った件について。。。

(_)アンダースコア、アンダーバーがついているのは、プライベートなプロパティじゃね?と思ったので、全部プロパティにアンダーバーつけたほうがいいんじゃね?って思ったんだけど、たぶんそういう問題じゃあないらしい。。

つまり、これはよく考えると…ゲッターとセッターとして機能させているという説明らしい…であるならば、get lastNameのthis._lastNameはプライベート・プロパティであり、getNameメソッドのthis.lastNameはgetterのlatsNameメソッドだ…ということになる…であっていると思っている。

どうでしょう?

これでも、

m.getName();
>”山田太郎”

これでも、

m.lastName + m.firstName;
> “山田太郎”

同じ結果が返却される。

ちなみに、これでも同じ結果が返る。(JavaScript的にはオブジェクト指向は糖衣構文でアクセッサは意味がなさないので当然ってことなんだろうけど…)

m._lastName + m._firstName;
> “山田太郎”

生Jsやっている人からすれば当たり前なんですけど。まあ、そういうオブジェクト指向信者(Java派のOPP信者)のための書き方ができるようになったということと理解した。

JavaScriptもJavaやC#のようなオブジェクト指向言語風にかけるけるようにしたけど、プラベートメソッドやプライベートプロパティという考えはそもそもない…。

だから、
let m = new Member(“太郎”, “山田”);
console.log(m._lastName);
などとやっても動いてしまう。

一般的なオブジェクト指向言語ならば、console.log(m._lastName);の行でエラーになります。アンスコが頭についている時点で、クラス外で使用するのは許可されない。

【全てのJSのオブジェクト指向嫌いマンに告ぐ】ES6のclass構文が素敵すぎて鼻水が止まらない - Qiita
----- !!! 注意 この文章は偏差値の低い人間が書いてます。 ・厳密な解釈を求める方 ・頭の悪い人間の文章を読みたくない方 ・低偏差値の人間が書いた文章を見るとデカめの蕁麻疹が全身にできるという方 は下の便利なリンクからちゃ...

今回のclass構文は、JavaやC++の様に本質的なclassの仕組みが実装されたわけではありません。糖衣構文という激アマな仕組みによって、prototypeカスが麗しいclassの形をしているだけなのです。

この1文がすべてを物語っている気がします。

Js怖いというかJsはチープというか、生Jsは使うべきじゃないと言うべきか…。

コメント

タイトルとURLをコピーしました