TIL [Class]
16582 ワード
クラスとインスタンスの作成
ES 6以前にJavaScriptでクラスを作成するのは直感的ではなく、面倒でした.しかし、ES 6はクラスを作成する簡単な新しい構文を導入した.
class Car{
constructor(){
}
}
上のコードは新しいクラスCarを作成します.製造例(特定自動車)はまだないが、いつでも製造できる.インスタンスを作成するときにnewキーワードを使用できます.newキーを使用してインスタンスを作成すると、classのthisがインスタンス(オブジェクト)になります.let car1 = new Car();
let car2 = new Car();
car1 instanceof Car // true
car2 instanceof Array // false
Carクラスの例が2つあります.class Car{
constructor(make, model){
this.make = make;
this.model = model;
this.userGears = ['P', 'N', 'R', 'D'];
this.userGear = this.userGears[0];
}
shift(gear){
if(this.userGears.indexOf(gear) < 0) throw new Error(`invalid gear: ${gear}`);
this.userGear = gear;
}
}
上記の例のこのキーワードは、呼び出しメソッドのインスタンスを指します.クラスを作成するときに使用するthisは、後で作成するインスタンスのプレースホルダロールと考えられます.メソッドを呼び出すと、thisが何であるかがわかります.上記のジェネレータを実行すると、インスタンスの作成時に自動車のメーカーとモデルを指定できます.また、userGearsはギアのリストであり、shiftという方法でuserGearを置き換えることができます.let car1 = new Car('Tesla', 'Model S');
car1.shift('D'); // this.userGear를 'D'로 바꿈
// 메서드를 호출한 car1이 새로운 인스턴스
car1.userGear; // 'D'
クラス式
クラスを定義する別の方法は、クラス式です.関数の式のように、変数に割り当てられます.
// unnamed
let Rectangle = class {
constructor(height, width) {
this.height = height;
this.width = width;
}
};
console.log(Rectangle.name); // Rectangle
// named
let Rectangle = class Rectangle2 {
constructor(height, width) {
this.height = height;
this.width = width;
}
};
console.log(Rectangle.name); // Rectangle2
const car1 = new Rectangle(3, 5);
car1.height // 3
car1.width // 5
const car2 = new Rectangle2(2, 2); // Error
クラス式によって変数に割り当てられたクラスは、自分の名前を書くことはできません.インスタンスを作成するときもnew+クラスを割り当てる変数名を使用します.クラスは関数
ES 6にclassを導入する前に、クラスを作成することは、クラスジェネレータ用の関数を作成することを意味する.現在のclass構文はより直感的で簡単ですが、実際にはclassはショートカット構文にすぎず、javascriptのクラス自体は変わりません.クラスは実は関数にすぎません.次はES 5でCarクラスを作成したときです.
const Car = function(make, model){
this.make = make;
this.model = model;
this.userGears = ['P', 'N', 'R', 'D'];
this.userGear = this.userGears[0];
.
.
.
}
静的メソッドとプロパティ
静的メソッドは、クラスインスタンス化なしで呼び出され、クラスインスタンスで呼び出されません.これは、クラスでstatic作成メソッドを使用すると、インスタンスがこのメソッドを使用できないことを意味します.
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
static displayName = "Point";
static distance(a, b) {
const dx = a.x - b.x;
const dy = a.y - b.y;
return Math.hypot(dx, dy);
}
}
const p1 = new Point(5, 5);
const p2 = new Point(10, 10);
p1.displayName; // undefined
p1.distance; // undefined
p2.displayName; // undefined
p2.distance; // undefined
console.log(Point.displayName); // "Point"
console.log(Point.distance(p1, p2)); // 7.0710678118654755
Reference
この問題について(TIL [Class]), 我々は、より多くの情報をここで見つけました https://velog.io/@dlrbwls0302/TIL-Classテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol