본문 바로가기

Programming/Javascript

13. Javascript 객체지향 프로그래밍(5) - subClass 구현하기 5

javascript logo image

 

이제 앞서 작성해본 subClass 함수를 사용해서, 실제로 상속을 실행하는 예제 코드를 만들어 보겠습니다. 

 

function subClass(obj) {

    var parent = this === window ? Function : this;

    var F = function() {};

    var child = function() {

        var _parent = child.parent;

        if(_parent && _parent !== Function) {
            _parent.apply(this, arguments);
        }

        if(child.prototype._init) {
            child.prototype._init.apply(this, arguments);
        }
    };


    F.prototype = parent.prototype;
    child.prototype = new F();
    child.prototype.constructor = child;
    child.parent = parent;
    child.subClass = arguments.callee;

    for(var i in obj) {
        if(obj.hasOwnProperty(i)){
            child.prototype[i] = obj[i];
        }
    }

    return child;

}

var person_obj = {
    _init : function() {
        console.log("person init");
    },
    getName : function() {
        return this._name;
    },
    setName : function(name) {
        this._name = name;
    }
};

var student_obj = {
    _init : function() {
        console.log("student init");
    },
    getName : function() {
        return "Student Name: " + this._name;
    }
};

var Person = subClass(person_obj);              // Person 클래스 정의
var person = new Person();                      // person init
person.setName("RAPPER");
console.log(person.getName());

var Student = Person.subClass(student_obj);     // 자식 클래스 Student 정의
var student = new Student();                    // person init, student init
student.setName("JAY PARK");
console.log(student.getName());