
const User = function(name, age){
this.name = name;
this.age = age;
this.showName = function () {
console.log(this.name);
}
}
const mike = new User("Mike", 30);
ES6에 추가된 스펙
class User2 {
constructor(name, age){
this.name = name;
this.age = age;
},
showName() {
console.log(this.name);
}
}
const tom = new User2("Tom", 19);
constructor
객체를 만들어 주는 생성자 메서드
객체 내부에 showName() 존재

Prototype 내부에 showName() 존재

const User = function(name, age){
this.name = name;
this.age = age;
// this.showName = function () {
// console.log(this.name);
// }
}
User.prototype.showName = function() {
console.log(this.name);
}
const mike = User("mike", 30); //new 가 생략됐지만 오류 x
const tom = User2("Tom", 19);
// Class constructor User2 cannot be invoked without 'new'
class Car {
constructor(color){
this.color = color;
this.wheels = 4 ;
}
drive() {
console.log("drive...")
}
stop() {
console.log("STOP!")
}
}
class Bmw extends Car {
park () {
console.log("PARK");
}
}
const z4 = new Bmw("blue")
console.log(z4)
프로퍼티 확인
z4 -> Bmw -> Car
class Car {
...
stop() {
console.log("STOP!")
}
}
class Bmw extends Car {
park () {
console.log("PARK");
}
stop() {
console.log("OFF")
}
}
const z4 = new Bmw("blue")
z4.stop() // OFF;
새롭게 선언된 함수로 덮어씀
부모의 함수를 사용하고 싶은 경우
class Bmw extends Car {
park () {
console.log("PARK");
}
stop() {
super.stop(); //Car.stop()
console.log("OFF")
}
}
const z4 = new Bmw("blue")
z4.stop();
// STOP!
// OFF
class Bmw extends Car {
constructor (){
this.navigation = 1;
}
park () {
console.log("PARK");
}
}
const z4 = new Bmw("blue")
//Must call super constructor in derived class before accessing 'this' or returning from derived constructor
extends 만들어진 자식 클래스는 항상
부모 클래스의 constructor를 실행해줘야함
class Bmw extends Car {
constructor (color){
super(color);
this.navigation = 1;
}
park () {
console.log("PARK");
}
}
class Bmw extends Car {
park () {
console.log("PARK");
}
}
---- 자바스크립트가 아래의 코드 처럼 자동으로 실행----
class Bmw extends Car {
constructor(...args){
super(...args);
}
park () {
console.log("PARK");
}
}