이전 글에서는 도구 함수 $class를 작성했는데, 이번 글에서는 다음과 같이 개선해 보겠습니다. 다음 기능을 구현하십시오.
1. 상속
2. 하위 클래스가 상위 클래스에서 상속되면 상위 클래스의 비공개 속성을 상속하지 않습니다.
다음과 같이 코드 코드를 복사합니다.
/**
* @param {String} 클래스이름
* @param {문자열/함수} superCls
* @param {함수} classImp
*/
함수 $class(className, superCls, classImp){
if(superCls === '') superCls = 객체;
함수clazz(){
if(typeof this.init == "함수"){
this.init.apply(this, 인수);
}
}
var p = clazz.prototype = new superCls();
var _super = superCls.prototype;
창[클래스이름] = 클래즈;
classImp.apply(p, [_super]);
}
먼저 상위 클래스를 작성하세요.
다음과 같이 코드 코드를 복사합니다.
/**
* 부모 클래스 Person
*/
$class('사람','',함수(){
//개인 속성 연령
다양한 연령;
this.init = 함수(n, a){
//공개 속성 이름
this.name = n;
// 개인 속성 초기화
나이=a;
};
this.getName = 함수(){
this.name을 반환합니다.
};
this.setName = 함수(이름){
this.name = 이름;
}
this.getAge = 함수(){
복귀 연령;
};
this.setAge = 함수(a){
나이=a;
};
});
하위 클래스 작성, Person에서 상속
다음과 같이 코드 코드를 복사합니다.
$class("남자",사람, 함수(supr){
var 학교;
this.init = 함수(n, a, s){
supr.init.apply(this, [n,a]);
학교 = s;
}
this.getSchool = 함수(){
학교로 돌아가다;
};
this.setSchool = 함수{
학교 = s;
};
});
새로운 서브클래스 인스턴스
다음과 같이 코드 코드를 복사합니다.
var m = new Man('tom', 25, 'pku');
console.log(m.name); // Tom은 상위 클래스의 공통 속성 이름을 상속하며 이를 얻기 위해 도트 연산자를 직접 사용할 수 있습니다.
console.log(m.age); // 정의되지 않음 상위 클래스의 개인 속성 age는 도트 연산자를 사용하여 직접 얻을 수 없습니다.
console.log(m.getAge()); // 25 비공개 속성 age는 상위 클래스의 공개 메소드 getAge를 통해 얻을 수 있습니다.
console.log(m.school); // 정의되지 않음 인간 자신의 개인 속성은 여전히 점 연산자를 통해 얻을 수 없습니다.
console.log(m.getSchool()); // pku는 getSchool() 메소드를 통해 사설 속성 학교를 얻습니다.