object
와는 다르게, 클래스(Class)라는 이름으로 부릅니다. let counter1 = {
value: 0,
increase: function() {
this.value++ // 메서드 호출을 할 경우, this는 counter1을 가리킵니다
},
decrease: function() {
this.value--
},
getValue: function() {
return this.value
}
}
counter1.increase()
counter1.increase()
counter1.increase()
counter1.decrease()
counter1.getValue() // 2
function makeCounter() {
let value = 0;
return {
increase: function() {
value++;
},
decrease: function() {
value--;
},
getValue: function() {
return value;
}
}
}
let counter1 = makeCounter()
counter1.increase()
counter1.getValue() // 1
let counter2 = makeCounter()
counter2.decrease()
counter2.decrease()
counter2.getValue() // -2
ES5
클래스는 함수로 정의할 수 있습니다.function Car(brand, name, color) {
// 인스턴스가 만들어질 때 실행되는 코드
}
ES6
에서는 class라는 키워드를 이용해서 정의할 수도 있다.class Car {
constructor(brand, name, color) {
// 인스턴스가 만들어질 때 실행되는 코드
}
}
new
키워드를 통해 클래스의 인스턴스를 만들어낼 수 있다.let avante = new Car('bmw', 'mini', 'white')
this
는 인스턴스 객체를 의미한다. parameter로 넘어온 브랜드, 이름, 색상 등은 인스턴스 생성 시 지정하는 값이며, 아래와 같이 this
에 할당한다는 것은 만들어진 인스턴스에 해당 브랜드, 이름, 색상을 부여하겠다는 의미이다.// ES5
function Car(brand, name, color) {
this.brand = brand;
this.name = name;
this.color = color;
}
// ES6
class Car {
constructor(brand, name, color) {
this.brand = brand;
this.name = name;
this.color = color;
}
}
Car.prototype.refuel
과 같이 prototype
을 이용해야 한다.refuel() {}
, drive() {}
와 같이 작성되어 있는 부분이다.// ES5
function Car(brand, name, color) { /* 생략 */}
Car.prototype.refuel = function() {
// 연료 공급을 구현하는 코드
}
Car.prototype.drive = function() {
// 운전을 구현하는 코드
}
// ES6 class Car {
constructor(brand, name, color) { /* 생략 */}
refuel() {
}
drive() {
}
}
prototype? constructor? this?
배열은 (대문자) Array의 인스턴스이다. 따라서 new Array(, , _)와 같은 방식으로도 배열을 만들 수 있다.
let arr = ['code', 'states', 'pre'];
let arr = new Array('code', 'states', 'pre');
Encapsulation (캡슐화)
Abstraction (추상화)
Inheritance (상속)
Polymorphism (다형성)
자바스크립트의 모든 객체는 프로토타입(prototype)이라는 객체를 가지고 있습니다.
모든 객체는 그들의 프로토타입으로부터 프로퍼티와 메소드를 상속받습니다.
이처럼 자바스크립트의 모든 객체는 최소한 하나 이상의 다른 객체로부터 상속을 받으며, 이때 상속되는 정보를 제공하는 객체를 프로토타입(prototype)이라고 합니다.
.prototype
.prototype
클래스에서 프로토타입에 접근할 때 사용한다.__proto__
__proto__
인스턴스에서 프로토타입에 접근할 때 사용한다.arr
은 Array
클래스의 인스턴스이며, 프로토타입에는 다양한 메서드가 존재한다.function Person(name, age){
this.hand = 2;
this.name = name;
this.age = age;
}
var Lucy = new Person('Lucy', 19);
var firstParent = Lucy.__proto__;
console.log(firstParent); // constructor: f Person(name, age)
var secondParent = firstParent.__proto__;
console.log(secondParent); // constructor: f Object();
var thirdParent = secondParent.__proto__;
console.log(thirdParent); // null