본문 바로가기

자바스크립트

모듈화와 클래스 생성(1)

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