Dev-/java script, jQuery, Ajax
자바스크립트 생성자 함수 패턴(생성자 강제)
thiago6
2019. 5. 1. 20:11
참고) 자바스크립트 객체 생성방법 new Object() vs 객체 리터럴({}) vs 생성자 함수
위 글에서 생성자 함수의 오류 가능성에 대해 이야기 했는데,
이를 방지하기 위한 패턴이 있다.
간단히 아래 사실을 이용해 강제한다.
this가 무엇을 가리키다?
- new를 붙여 함수 사용시 : 함수 객체 자신
- 그냥 사용시: window
let Human = function(name) {
if (!(this instanceof Human))
return new Human(name ? name : 0);
this.name = name ? name : 0;
};
/** 아래와 같이 new를 안붙여도 생성자로 사용된다 */
let human = Human('hoon');
console.log(human);
쪼금 더 좋은 방법
argument 프로퍼티의 callee프로퍼티를 사용한다. (매개변수를 호출한 객체) -> 즉 함수의 이름과 상관없음
let Human = function CustomName(name) {
if (!(this instanceof arguments.callee))
return new arguments.callee(name ? name : 0);
this.name = name ? name : 0;
};
let human = Human('hoon');
console.log(human);