Instantiation Pattern은 JS로 무언가를 만드는 방법
: 함수 생성 → 함수 내에서 빈 객체를 만들고 속성과 메서드를 추가한 후 객체를 return한다.
let Animal = function(name) {
let object = {};
object.name = name;
object.eat = function() {
// code goes here
}
return object;
}
let rabbit = Animal("토끼");
carrot.eat();
: 함수 생성 → 함수 내에서 빈 객체를 만들고 속성 정의 → 다른 객체에 메서드를 정의해준 후 함수 내의 객체에서 주소값만 참조
let extend = function(object, method) {
for(let key in method) {
object[key] = method[key]
}
}
let Animal = function(species, name) {
let object = {};
object.species = species;
object.name = name;
extend(object, objMethod)
return object;
}
let objMethod = {
eat: function() {
// code goes here
}
sleep: function() {
// code goes here
}
}
let tiger = Animal("호랑이", "호랑이");
tiger.eat();
tiger.sleep();
: prototype chain을 사용하여 객체를 만든다. (Object.create 사용)
별도의 객체에 모든 메서드를 작성 → 함수를 생성 → 함수 안에서 Object.create 메서드를 사용하여 메서드를 참조한다. → 함수 내부의 속성을 정의한 후 객체를 return
let Animal = function(species, name) {
let object = Object.create(objMethod);
object.species = species;
object.name = name;
return object;
}
let objMethod = {
eat: function() {
// code goes here
}
makeSound: function() {
// code goes here
}
}
let tiger = Food("호랑이", "호랑이");
tiger.eat();
tiger.makeSound();
-: 함수 생성 → this
키워드를 사용하여 속성 정의 → 메서드는 prototype에 정의 → 인스턴스 객체 만들 때 new
키워드 사용
let Animal = function(species, name) {
this.species = species; // this 키워드 사용
this.name = name;
}
Animal.prototype.eat = function() {
// code goes here
}
Animal.prototype.makeSound = function() {
// code goes here
}
let tiger = Food("호랑이", "호랑이"); // 라면을 먹는 중입니다.
tiger.eat();
tiger.makeSound();
/ pseudo = 가짜의, 가짜로 class 개념을 흉내내는 방식. /
call
/apply
를 통해 부모 생성자 함수와 연결. 자식 생성자 함수의 prototype 객체를 Object.create
메서드를 통해 부모 생성자 함수의 prototype과 연결. 자식 생성자 함수의 constructor를 자기 자신으로 재할당.Object.create()
을 실행한다. (새로운 주소값을 가지고 새로운 프로토타입 객체 생성)*apply(): fn.apply(thisArg, [argsArray]) / this 인자를 첫번째 인자로 받고, 두번째 인자로는 배열을 받음
Reference:
Instantiation Patterns in JavaScript