새 클래스를 만들 때 선택사항으로 부모를 넘겨줄 수 있도록 함수를 구현할 것.
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 |