우선 ES5전 까지는 비슷한 종류의 객체를 많이 찍어내기 위해 생성자를 사용해왔다.
// 생성자
function Person({name, age}) {
this.name = name;
this.age = age;
}
Person.prototype.introduce = function() {
return `안녕하세요, 제 이름은 ${this.name}입니다.`;
};
const person = new Person({name: 'tiger', age: 22});
console.log(person.introduce());
console.log(typeof Person);
console.log(typeof Person.prototype.constructor);
console.log(typeof Person.prototype.introduce);
console.log(person instanceof Person); // true
// 클래스
class Person {
// 이전에서 사용하던 생성자 함수는 클래스 안에
// `constructor`라는 이름으로 정의합니다.
constructor({name, age}) {
this.name = name;
this.age = age;
}
// 객체에서 메소드를 정의할 때 사용하던 문법을 그대로 사용하면,
// 메소드가 자동으로 `Person.prototype`에 저장됩니다.
introduce() {
return `안녕하세요, 제 이름은 ${this.name}입니다.`;
}
}
const person = new Person({name: 'tiger', age: 22});
console.log(person.introduce());
console.log(typeof Person);
console.log(typeof Person.prototype.constructor);
console.log(typeof Person.prototype.introduce);
console.log(person instanceof Person); // true
class Person {
console.log('hello');
}
class Person {
prop1: 1,
prop2: 2
}
class Parent {
}
class Child extends Parent {
}
class Parent {
static staticProp = 'staticProp';
static staticMethod() {
return 'I\'m a static method.';
}
instanceProp = 'instanceProp';
instanceMethod() {
return 'I\'m a instance method.';
}
}
class Child extends Parent {}
console.log(Child.staticProp); // staticProp
console.log(Child.staticMethod()); // I'm a static method.
const c = new Child();
console.log(c.instanceProp); // instanceProp
console.log(c.instanceMethod()); // I'm a instance method.
class Melon {
getColor() {
return '제 색깔은 초록색입니다.';
}
}
class WaterMelon extends Melon {
getColor() {
return '속은 빨강색입니다.';
}
}
const waterMelon = new WaterMelon();
waterMelon.getColor(); // 속은 빨강색입니다.
class Melon {
getColor() {
return '제 색깔은 초록색입니다.';
}
}
class WaterMelon extends Melon {
getColor() {
return super.getColor() + ' 하지만 속은 빨강색입니다.';
}
}
const waterMelon = new WaterMelon();
waterMelon.getColor(); // 제 색깔은 초록색입니다. 하지만 속은 빨강색입니다.
class Person {}
class Student extends Person {}
const student = new Student();