Class vs Object
18540 ワード
Class vs Object
Class
Object
aクラスインスタンス
Classとは?
プロトタイプベースの構文のみを追加し、新しいclassは追加しません.
クラス宣言
class Person {
// constructor
constructor(name, age) {
// fields
this.name = name;
this.age = age;
// methods
speak() {
console.log(`${this.name}: hello!`);
}
}
}
const ellie = new Person('ellie', 20);
ellie.speak();
Getter and Setter
ユーザーがクラスの属性を誤って使用することを防止する防御メカニズム
class Person {
constructor(firstName, lastName, age) {
this.firstName = firstName ;
this.lastName = lastName
this.age = age;
}
// getter
get age() {
return this._age;
}
// setter
set age(value) {
this._age = value;
}
}
const ellie = new Person('Steve','Job', -1);
console.log(user1.age); // getter age 호출
this.ageはmemoryではなくget ageを呼び出し、ageはsetageを呼び出す.set ageではこれ無限ループでage(get age)を呼び出すとエラーが発生します.
Public & Private
public
class外部からアクセスできます.
private
classの外部では、読み取りや変更は許可されていません.
class Experiment {
publicField = 2; // public
#privateField = 0; // private
}
const experiment = new Experiment();
console.log(experiment.publicField); // 2
console.log(experiment.privateField ); // undefined
Static
class Article {
static publisher = 'Dream Coding';
constructor(articleNumber) {
this.articleNumber = articleNumber;
}
static printPublisher() {
console.log(Article.publisher);
}
}
const article1 = new Article(1);
const article2 = new Article(2);
console.log(article1.publisher); // undefined
console.log(Article.publisher); // Dream Coding
Article.printPublisher();
継承と多様性
複数のクラスに共通のプロパティがある場合は、親クラスを作成してプロパティを再利用できます.
class Shape {
constructor(width, height, color) {
this.width = width;
this.height = height;
this.color = color;
}
draw() {
console.log(`drawing ${this.color} color of`);
}
getArea() {
return width * this.height;
}
}
class Rectangle extends Shape {} // 상속
class Triangle extends Shape {
draw() {
super.draw(); // 재정의 해도 부모의 draw() 메서드를 사용할 수 있음
console.log('🎈'); // overwiring
}
getArea() {
return (this.width * this.height) / 2; // overwirting
}
}
const rectangle = new Rectangle(20, 20, 'blue');
rectangle.draw();
const triangle = new Triangle (20, 20, 'red');
triangle.draw();
InstanceOf
クラスのインスタンスかどうかを決定します.
console.log(rectangle instanceof Rectangle); // True
console.log(triangle instanceof Rectangle); // False
console.log(triangle instanceof Triangle); // True
console.log(triangle instanceof Shape); // True
console.log(triangle instanceof Object); // True
Reference
この問題について(Class vs Object), 我々は、より多くの情報をここで見つけました https://velog.io/@singco/ES6-Class-vs-Objectテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol