참고) 자바스크립트 객체 생성방법 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);
'Dev- > java script, jQuery, Ajax' 카테고리의 다른 글
자바스크립트 this 바인딩 (0) | 2019.05.11 |
---|---|
자바스크립트 스코프 체인 쉽게 이해할 수 있는 예제 (0) | 2019.05.04 |
자바스크립트 객체 생성방법 new Object() vs 객체 리터럴({}) vs 생성자 함수 (1) | 2019.05.01 |
var, let, const 차이 (0) | 2019.05.01 |
자바스크립트 arguments(매개변수의 갯수에 따른 처리가 필요할 때) (0) | 2019.05.01 |