본문 바로가기

자바스크립트

클래스 라이브러리에 상속 기능 추가하기

새 클래스를 만들 때 선택사항으로 부모를 넘겨줄 수 있도록 함수를 구현할 것.

var Class = function(parent) {
    var klass = function() {
        this.init.apply(this, arguments);
    }

    if(parent) {
        var subclass = function() {};
        subclass.prototype = parent.prototype;
        klass.prototype = new subclass;
    }

    klass.prototype.init = function() {};

    klass.fn = klass.prototype;
    klass.fn.parent = klass;
    klass._super = klass.__proto__;

    // 클래스 프로퍼티 추가
    klass.extend = function(obj) {
        var extended = obj.extended;
        for(var i in obj) {
            klass[i] = obj[i];
        }

        if(extended) extended(klass)
    }

    // 인스턴스 프로퍼티 추가
    klass.include = function(obj) {
        var included = obj.included;
        for(var i in obj) {
            klass.fn[i] = obj[i];
        }

        if(included) included(klass)
    }

    return klass;
}

Class의 생성자에 parent를 넘겨주면 모든 하위클래스는 같은 프로토타입을 공유한다.

일시적으로 사용하는 익명 함수 주변의 코드는 클래스를 상속할 때 인스턴스를 만들지 않도록 방지한다.

이때 클래스 프로퍼티를 제외한 인스턴스 프로퍼티만을 상속한다는 점을 기억하자.

 

이제 부모 클래스를 Class에 전달해서 간단한 상속을 수행할 수 있다.

var Class = function(parent) {
    var klass = function() {
        this.init.apply(this, arguments);
    }

    if(parent) {
        var subclass = function() {};
        subclass.prototype = parent.prototype;
        klass.prototype = new subclass;
    }

    klass.prototype.init = function() {};

    klass.fn = klass.prototype;
    klass.fn.parent = klass;
    klass._super = klass.__proto__;

    // 클래스 프로퍼티 추가
    klass.extend = function(obj) {
        var extended = obj.extended;
        for(var i in obj) {
            klass[i] = obj[i];
        }

        if(extended) extended(klass)
    }

    // 인스턴스 프로퍼티 추가
    klass.include = function(obj) {
        var included = obj.included;
        for(var i in obj) {
            klass.fn[i] = obj[i];
        }

        if(included) included(klass)
    }

    return klass;
}

var Animal = new Class;

Animal.include({
    breath: function() {
        console.log('breath');
    }
});

var Cat = new Class(Animal);

var tommy = new Cat;
tommy.breath();     // breath

'자바스크립트' 카테고리의 다른 글

클래스 라이브러리에서 범위 조절하기  (0) 2022.04.03
함수 호출  (0) 2022.04.03
클래스 상속과 프로토타입  (0) 2022.04.03
모듈화와 클래스생성(2)  (0) 2022.03.20
모듈화와 클래스 생성(1)  (0) 2022.03.20