자기 자신을 정의하는 함수
함수는 동적으로 정의할 수 있고 변수에 할당할 수 있다. 어떤 면에서는 이전의 함수 포인터가 새로운 함수를 가리키도록 재사용하는 것이다.
var scareMe = function(){
console.log("boo");
scareMe = function(){
console.log("double boo");
};
};
// 자기 자신을 정의하는 함수를 사용
scareMe(); // boo
scareMe(); // double boo
이 패턴은 함수가 어떤 초기화 준비 작업을 단 한 번만 수행할 경우 유용하다.
단점은 자기 자신을 재정의한 이후에는 이전에 원본 함수에 추가했던 프로퍼티들을 모두 찾을 수 없게 된다는 점이다. 또한 함수가 다른 이름으로 사용된다면 재정의된 부분이 아니라 원본 함수의 본문이 실행된다.
1. 새로운 프로퍼티가 추가된다.
2. 함수 객체가 새로운 변수에 할당된다.
3. 함수는 메서드로도 사용된다.
var scareMe = function(){
console.log("boo");
scareMe = function(){
console.log("double boo");
};
};
// 자기 자신을 정의하는 함수를 사용
// scareMe(); // boo
// scareMe(); // double boo
// 1. 새로운 프로퍼티가 추가된다.
scareMe.property = "property";
// 2. 함수 객체가 새로운 변수에 할당된다.
var prank = scareMe;
// 3. 함수는 메서드로도 사용된다.
var spooky = {
boo : scareMe
}
// 새로운 이름으로 호출한다.
prank(); // boo
prank(); // boo
console.log(prank.property); // property
// 메서드로 호출한다.
spooky.boo(); // boo
spooky.boo(); // boo
console.log(spooky.boo.property); // property
// 자기 자신을 재정의한 함수를 사용한다.
scareMe(); // 'double boo'
scareMe(); // 'double boo'
console.log(scareMe.property); // undefined
예제에서 보는 것처럼 함수가 새로운 변수에 할당되면 예상과 달리 자기 자신을 정의하지 않는다.
'개발 > dev-patterns' 카테고리의 다른 글
자바스크립트 코딩 기법과 핵심 패턴 - 즉시 객체 초기화 (0) | 2019.08.06 |
---|---|
자바스크립트 코딩 기법과 핵심 패턴 - 즉시 실행 함수 (0) | 2019.08.06 |
자바스크립트 코딩 기법과 핵심 패턴 - 콜백 패턴 (0) | 2019.08.05 |
자바스크립트 코딩 기법과 핵심 패턴 - 함수 (0) | 2019.08.05 |
자바스크립트 코딩 기법과 핵심 패턴 - 에러 객체 (0) | 2019.08.02 |