js는 프로토타입 기반 언어입니다.
클래스 기반 언어 : 상속 사용
프로토타입 기반 언어 : 어떤 객체를 원형으로 삼고 이를 복제(참조)함으로써 상속과 비슷한 효과가 가능해요.
javascript는 프로토타입 기반 언어예요. 방금
상속과 비슷한 효과라고 말하긴 했지만 상속을 생각하지 말아요!연결, 링크라고 생각하는게 좋다고 생각합니다!
프로토타입 이해를 위해 3가지 constructor, prototype, instance를 기억해봅시다.
const instance = new Constructor();

혹시 개발할 때 객체를 console.log() 찍어본 경우 있지 않으신가요? 본인이 만들지도 않은 proto가 붙어 있는 걸 본 적이 있을 거예요.
proto 프로퍼티는 생략할 수 있도록 구현되어 있어요. 따라서, 생성자 함수의 prototype에 어떤 메서드나 프로퍼티가 있다면 instance에서도 마치 자신의 것처럼 해당 메서드나 프로퍼티에 접근할 수 있게 됩니다. (거의 생성자 함수를 상속 받는 아니죠, 연결된! 느낌이네요.)
예를 들어볼까요?
const a = {
attr1: 'hi'
};
const b = {
attr: 'hello'
};
a.__proto__ = b;
console.log(a.attr2) // "hello"
Mixin은 다른 언어와 달리 자바스크립트에 없는 클래스 복사 기능을 흉내 낸 것이라고 생각하시면 됩니다.
메서드를 제공하는데 단독으로 쓰이지 않고, 다른 객체에 행동을 더해주는 용도로 사용됩니다.const clickableMethods = {
hover() {
console.log('hovering')
},
press() {
console.log('button pressed')
},
click() {
console.log('button clicked')
},
}
----------------------------------------
function Button(size, color) {
this.size = size
this.color = color
}
----------------------------------------
Object.assign(Button.prototype, clickableMethods) // Button 객체에 clickableMethods라는 행동을 더해주는 용도로 사용되고 있어요.
new Button(20, 'primary').hover() // hovering