new 키워드는 return 문의 동작과 함수의 컨텍스트를 변경한다.
var Person = function(name) {
this.name = name;
}
var alice = new Person('devjones');
Person('grindman');
new 키워드를 붙이지 않고 Person('grindman')처럼 호출하면
놀랍게도 name 변수가 전역변수가 되고 함수는 undefined를 리턴한다.
new 키워드를 이용해 생성자 함수를 호출하면 컨텍스트가 전역(윈도우)에서 만들려고 하는 인스턴스 전용의 새로운 빈 컨텍스트로 바뀐다.
this 키워드는 현재 인스턴스를 가리킨다.
생성자 함수에서 return이 없으면 현재 컨텍스트를 가리키는 this를 리턴한다.
또는 기본형을 제외한 모든 타입을 리턴할 수 있다.
예를 들어 새 클래스를 설정하는 함수를 리턴할 수 있다.
새 클래스를 설정하는 함수를 리턴하는 일은 직접 클래스 에뮬레이션 라이브러리르 만드는 첫 걸음에 해당한다.
var Class = function() {
var klass = function() {
this.init.apply(this, arguments);
}
klass.prototype.init = function(){}
return klass;
}
var Person = new Class;
Person.prototype.init = function() {
// Person을 인스턴스화 할 때 호출됨.
}
var person = new Person;
클래스에 함수 추가하기
Person.find = function(id) {}
var person = Person.find(999);
인스턴스 함수를 생성자 함수에 추가하려면...
Person.prototype.breath = function() {}
// Person.fn = Person.prototype;
// Person.fn.breath = function()
var person = new Person;
person.breath();
'자바스크립트' 카테고리의 다른 글
클래스 상속과 프로토타입 (0) | 2022.04.03 |
---|---|
모듈화와 클래스생성(2) (0) | 2022.03.20 |
프로토타입 체이닝 (0) | 2022.01.29 |
생성자 함수가 동작하는 방식 (0) | 2022.01.29 |
this 바인딩 (0) | 2022.01.09 |