이전 글에서는 $class라는 도구 함수를 작성했는데, 이번 글에서는 다음과 같이 개선해 보겠습니다. 다음 기능 구현
1, 상속
2. 하위 클래스가 상위 클래스를 상속하는 경우 상위 클래스의 비공개 속성을 상속하지 않습니다.
/**
* @param {String} className
* @param {String/Function} superCls
* @param {Function} classImp
*/
function $class(className, superCls, classImp){
if(superCls === '') superCls = 개체;
함수 claz(){
= new superCls(); var _super = superCls.prototype;
window[className] = clazz
classImp.apply(p, [_super])
}
부모 클래스를 먼저 작성
코드 복사
코드는 다음과 같습니다./** * 부모 클래스 인물 */
$class('Person','',function(){
// 사유 재산 연령
var age;
this.init = function(n, a){
return this.name
}
this.setName = function(name){
this.name = name;
}
this.getAge = function(){
return age;
}
this.setAge = function(a){
age = a; };
});
Person
코드 복사
에서 상속되는 하위 클래스 작성 코드는 다음과 같습니다:
$class("Man",Person, function(supr){
var school;
this.init = function(n, a, 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); // 정의되지 않음 Man 자신의 개인 속성은 여전히 도트 연산자를 통해 얻을 수 없습니다
console.log(m.getSchool) ()) // pku는 개인 속성 school을 얻습니다 getSchool() 메소드를 통해