不自然な日本語ですみません
できるだけシンプルなイメージで説明をします
クラスはオブジェクトを作成するためのテンプレートです
constructor
はクラスのプロパティ(変数や定数)を定義する場所です
人間のクラスを作りたい場合は、人間の国籍、身長などconstructor
で定義できます。国籍、身長は人間のプロパティですね
const people = class {
constructor(nationality, height) {
this.nationality = nationality;
this.height = height;
}
};
上記のコードで人間のクラス、人間というオブジェクトのテンプレートpeople
を作りましたので、次は具体的な人を作りましょう
私は中国人で身長180
あなたは日本人で身長185
どうやって一つのクラスで国籍、身長が全然違う二人を作るか
これはconstructor
のパラメータに具体的な国籍と身長を入力することで作れます
定義の時に:
constructor(nationality, height){...}
new
(初期化/インスタンス/具体的な人をつくる)の時に:
const person = new people(nationality(具体的な国籍), height(具体的な身長))
定義する時はconstructor
で定義、初期化する時はクラスで使います
考えると、constructor
がなければ、具体的な値(中国、日本など)が入力できません、constructor
のパラメータはある意味でクラスのプロパティを変更する値の入り口のイメージです
const chinese = new people("中国",180)
console.log(chinese.nationality) // "中国"
console.log(chinese.height) // 180
const japanese = new people("日本",185)
console.log(japanese.nationality) // "日本"
console.log(japanese.height) // 185
質問を回答してみます
const hogeclass = class {
let x = x
let y = y
}
上記の書き方はエラーを起こすみたいです
まず定義したx
の値のx
はどこからでしょうね、この書き方は入り口がないです。
国籍、身長が全然違う二人を作りたい場合は、具体的な値(中国、日本など)をクラスに渡すことができません。(この書き方で定義した変数はクラス外部からアクセスできません、これは別の話…)
クラスの概念は色々ありますが、単純なconstructor
についての説明は以上です。
メソッドだけのクラス:
class person {
talk(){
console.log("hello")
}
}
let tanaka = new person()
tanaka.talk() // "hello"