자바스크립트를 사용하는 사람 모두 들어봤을 것이다. Prototype.
설명해보라고 하면 조금 애매해지기에 명확히 짚어보고 넘어가자.
자바스크립트 객체는 Prototype이라는 내부 프로퍼티가 존재한다. 거의 모든 객체가 생성 시점에 이 프로퍼티에 null이 아닌 값이 할당된다.
const woody = {
riding:true
}
woody.riding // true
const buzz = {
flying:true
}
const woody = Object.create(buzz);
// 우디가 날 수 있게 되었다!
woody.flying; // true
// this를 사용
function Toy(name){
this.name = name;
this.battery = 100;
this.charge = function(){
battery += 10;
console.log(`charging is finished. battery is ${this.battery}`)
}
}
const woody = new Toy('woody');
const buzz = new Toy('buzz');
// prototype 사용
function Toy(name){
this.name = name;
this.battery = 100;
}
Toy.prototype.charge = function(){
this.battery += 10;
console.log(`charging is finished. battery is ${this.battery}`)
}
const woody = new Toy('woody');
const buzz = new Toy('buzz');
객체에 존재하지 않는 프로퍼티를 접근하려 시도하면 해당 객체의 내부 [[Prototype]] 링크를 따라 다음 수색 장소를 결정한다. 모든 일반 객체의 최상위 프로토타입 연쇄는 내장 Object.prototype이고 이 지점에서도 찾지 못하면 탐색이 종료된다.
두 객체를 서로 연결짓는 가장 일반적인 방법은 함수 호출 시 new키워드를 앞에 붙이는 것이다. new키워드는 일반 함수 호출 + "객체" 생성이라는 잔업을 더 부과하는 지시자이다. const f = new Foo()를 실행하면 Foo 함수가 실행되고, 객체가 생성되어 변수 f 에 할당된다.
typeof f // object
typeof Foo //function