JavaScript로 클래스를 작성하는 방법은 이전에 논의되었습니다. 그러나 민간 구현은 논의되지 않습니다. 이 기사를 읽어보세요.
우리는 JS에서 개인 속성의 구현 본질이 var + closure라는 것을 알고 있습니다. 다음과 같이
다음과 같이 코드 코드를 복사합니다.
함수 사람(n, a){
// 공공의
this.name = n;
// 사적인
변수 나이 = a;
this.getName = 함수(){
this.name을 반환합니다.
}
this.getAge = 함수(){
복귀 연령;
}
}
테스트는 다음과 같습니다. Age는 비공개이며 점 연산자를 사용하여 얻을 수 없으며 대신 getName 메서드를 사용할 수 있습니다.
다음과 같이 코드 코드를 복사합니다.
var p = new Person('jack',23);
console.log(p.age); // 정의되지 않음
console.log(p.getAge()); // 23
위의 내용은 놀랄 일이 아닙니다. 아래에서 도구 기능을 사용하여 구현해 보겠습니다.
다음과 같이 코드 코드를 복사합니다.
/**
* @param {String} 클래스이름
* @param {함수} classImp
*/
함수 $class(className, classImp){
함수clazz(){
if(typeof this.init == "함수"){
this.init.apply(this, 인수);
}
}
classImp.call(clazz.prototype);
창[클래스이름] = 클래즈;
}
수업을 작성하다
다음과 같이 코드 코드를 복사합니다.
$class('사람', 함수(){
// 개인 속성은 여기에 정의됩니다.
var 나이 = '';
this.init = 함수(n, a){
//공유 속성이 여기에 걸려 초기화됩니다.
this.name = n;
// 개인 속성 초기화
나이=a;
};
this.getName = 함수(){
this.name을 반환합니다.
};
this.getAge = 함수(){
복귀 연령;
}
});
새로운 인스턴스 객체
다음과 같이 코드 코드를 복사합니다.
var p = new Person('jack',23);
console.log(p.name); // jack에 공통적으로 점 연산자를 사용하여 가져올 수 있습니다.
console.log(p.age); // 정의되지 않은 개인 정보는 점 연산자를 통해 얻을 수 없습니다.
console.log(p.getAge()); // 23 비공개 연령은 공개 메소드 getAge를 통해서만 얻을 수 있습니다.