객체를 만들 수 있는 새로운 방법
class A {}
console.log(new A());
const B = class {} ;
console.log(new B());
new C();
class C {}
=> 오류발생
constructor ( 생성자 )
- 최초의 초기값을 객체 안으로 넣을 수 있도록 한다.
class A {}
console.log(new A());
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));
멤버 변수 ( 객체의 프로퍼티 )
class A {
constructor(name,age){
this.name = name;
this.age = age;
}
]
console.log(new A('mark',27));
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 {
hello(){
console.log('hello1',this);
}
hello2 = () => {
console.log('hello2',this);
};
}
new A().hello();
new A().hello2();
this라는 것은 A{ hello2: [function:hello2] }
A{ hello2: [function:hello2] }
class B {
name = 'Mark';
hello() {
console.log('hello',this.name);
}
}
new B().hello();
get , set ( 게터, 세터 )
class A {
_name ='no name';
get name() {
retrun this._name + '@@@';
}
set name(value) {
this._name = value + '!!!';
}
}
const a = new A();
console.log(a);
a.name = 'Mark';
console.log(a);
console.log(a.name)
console.log(a._name);
_를 내부적으로 사용할때는 멤버변수로 나타난다.
get , set 외부에서 나타나는 퍼블릭한 접근 제어자
static 변수, 함수
class A {
static age = 35;
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);
extends (상속)
class Parent {
name : 'Lee';
hello() {
console.log('hello',this.name);
}
}
class Child extends Parent {}
Parent를 가지고 있는 멤버함수가 child가 가져간다
const p = new Parent ();
const c = new Child ();
console.log(p);
console.log(c);
c.hello();
c.name = 'Anna'
c.hello();
overrride ( 클래스의 상속 멤버변수 및 함수 오버라이딩 , 추가)
- 부모에게서 구현된 함수나 변수가 자식에게서 똑같은 이름으로 구현시키면 override된다
- 자식이 만드는 함수가 부모의 함수를 덮어 씌운다
- 자식이 가지는 것중에 부모가 가지고 있지 않으면 추가를 시킨다
class Parent {
naem = 'Lee';
hello () {
console.log('hello',this.name);
}
}
class Child extends Parent {
age =27;
hello () {
console.log('hello',this.name, this.age);
}
}
const p = new Parent ();
const c = new Child ();
console.log(p,c);
c에서 자식이 같은 이름의 함수를 호출하면 자식이 가지는 함수를 덮어씌워서 호출하게 된다.
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',37);
console.log(p,c);
c.hello();
static 상속
class Parent {
static age = 37;
}
class Child extends Parent{}
- 부모의 class를 자식 class가 상속
- 부모의 클래서 , 자식 클래스가 new를 통해 instance가 만들어짐
- 멤버변수, 멤버함수도 모두 상속받을 수 있는 구조로 만들어진다