
//class
// 선언적 방식
class A {}
console.log(new A());
// class 표현식을 변수에 할당
const B = class {};
console.log(new B());
// 선언적 방식이지만 호이스팅은 일어나지 않는다.
new C();
class C {}
결과


// constructor
class A{}
console.log(new A());// 객체 생성
// B객체를 만들면 안에 있는 constructor() 가 실행됨
class B{
constructor() {
console.log('constructor');
}
}
console.log(new B());
class C {
constructor(name, age){
console.log('constructor', name, age);
}
}
console.log(new C('Mark', 27));
console.log(new C());
결과


// 멤버 변수
class A {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
console.log(new A('Mark', 27));
// class field 는 런타임 확인
class B {
name;
age;
}
console.log(new B());
class C {
name = 'no name';
age = 0;
constructor(name, age) {
this.name = name;
this.age = age;
}
}
console.log(new C('Mark', 27));
결과

// 멤버 함수
class A {
hello1() {
console.log('hello1', this);
}
hello2 = () => {
console.log('hello2', this);
};
}
new A().hello1();
new A().hello2();
class B {
name = 'Mark';
hello() {
console.log('hello', this.name);
}
}
new B().hello();
결과


// get, set
class A {
_name = 'no name';
get name() {
return this._name + '@@@';
}
set name(value) {
this._name = value + '!!!';
}
}
const a = new A();
console.log(a);
a.name = 'Mark'; // setter
console.log(a);
console.log(a.name); // getter
console.log(a._name);
//readonly
class B {
_name = 'no name';
get name() {
return this._name + '@@@';
}
}
const b = new B();
console.log(b);
b.name = 'Mark'; // 클래스B안에 setter함수가 없기 때문에 name에 'Mark'가 초기화 되지 않음
console.log(b);
결과


클래스를 new()를 사용해서 객체를 생성하는게 아니라 클래스를 통해서 변수와 함수를 사용하는 방식
// static 변수, 함수
class A {
static age = 37;
static hello() {
console.log(A.age);
}
}
console.log(A, A.age);
A.hello();
class B {
age = 37;
static hello() {
console.log(this.age);
}
}
console.log(B, B.age);
B.hello();
//new B().hello();
class C {
static name = '이 클래스의 이름을 C 가 아니다.'
}
console.log(C);
결과


// 상속 기본
class Parent {
name = 'Lee';
hello() {
console.log('hello', this.name);
}
}
class Child extends Parent {
}
const p = new Parent();
const c = new Child();
console.log(p, c);
c.hello();
c.name = 'Anna';
c.hello();
결과


// 변수, 함수 추가 및 오버라이딩
class Parent {
name = 'Lee';
hello() {
console.log('hello', this.name);
}
}
class Child extends Parent {
age = 37;
hello() {
console.log('hello', this.name, this.age);
}
}
const p = new Parent();
const c = new Child();
console.log(p, c);
c.hello();
c.name = 'Anna';
c.hello();
결과


// super
class Parent {
name;
constructor(name) {
this.name = name;
}
hello() {
console.log('hello', this.name);
}
}
class Child extends Parent {
age;
constructor(name, age){
super(name);
this.age = age;
}
hello() {
console.log('hello', this.name, this.age);
}
}
const p = new Parent('Mark');
const c = new Child('Mark', 27);
console.log(p,c);
c.hello();
결과


// static 상속
class Parent {
static age = 37;
}
class Child extends Parent {}
console.log(Parent.age, Child.age);
결과


'공부내용정리 > JavaScript' 카테고리의 다른 글
| JavaScript Async - Await (0) | 2021.04.08 |
|---|---|
| JavaScript Promise (0) | 2021.04.08 |
| JavaScript 객체 (0) | 2021.04.05 |
| JavaScript 함수 (0) | 2021.04.04 |
| JavaScript 반복문 (0) | 2021.03.28 |