이전에 JavaScript로 클래스를 작성하는 방법에 대해 논의한 적이 있습니다. 그러나 민간 구현은 논의되지 않습니다. 이 기사를 읽어보세요.
JS의 사유 속성 구현 핵심은 var 클로저라는 것을 알고 있습니다. 다음과 같습니다
function Person(n, a ){
// 공개
this.name = n
// 비공개
var age = a
this.getName = function(){
return this.name;
}
this.getAge = function(){
return age;
}
}
테스트는 다음과 같습니다. 나이는 비공개이므로 공개할 수 없습니다. 도트 연산자를 사용하여 얻어지며, getName 메소드만 사용할 수 있습니다.
var p = new Person('jack' ,23) ;
console.log(p.age); // 정의되지 않음
console.log(p.getAge()) // 23
이상할 점은 없습니다. 위의 내용을 아래에서 도구 기능을 사용하여 구현하겠습니다.
/**
* @param {String} className
* @param {Function} classImp
*/
function $class(className, classImp){
function clazz(){
if(typeof this.init == "function"){
this.init.apply(this, 인수); 🎜> }
}
classImp.call(clazz.prototype);
window[className] = clazz;
}
클래스 작성
$class('Person', function(){
// 비공개 속성은 여기에 정의됩니다
var age = '';
this.init = function(n, a){
// 모든 속성이 this에 걸려 초기화됩니다.
this.name = n;
// 개인 속성 초기화
age = a;
}
this.getName = function(){
return this.name; .getAge = function( ){
. >
코드는 다음과 같습니다.
var p = new Person('jack' ,23)
콘솔 .log(p.name); // Jack은 점 연산자를 사용하여 가져올 수 있습니다.
console.log(p.age); // 정의되지 않은 개인 정보는 점 연산자를 통해 얻을 수 없습니다.
console.log(p .getAge()); // 23 개인 연령은 일반적인 메소드 getAge를 통해서만
을 얻을 수 있습니다.