이 모드의 역할은 객체 속성이 실제로 사유화되도록 하는 것입니다. 객체의 상태에 직접 액세스할 수 없으며 권한 있는 메서드를 통해서만 작동할 수 있습니다.
직접 예를 들어보겠습니다. >
var that = {};
that .getName = function() {
return cfg.name || '알 수 없는 이름'
}// 성별 기본 남성
that.getGender = function() {
return cfg .gender || '남성'
return that
}
var 프로그래머 = function(cfg),
share = {};
share.status = 'normal';
that.getFamiliarLanguage = function() {
return (cfg.langs || []).join(' ');
} ;
that.getProfile = function() {
return '안녕하세요. 내 이름은 that.getName()입니다.
}
that.getStatus = function() {
return share .status;
that.setStatus = function(status) {
share.status =
}; 🎜>var me = 프로그래머({
이름: 'AndyZhang',
성별: '남성',
// 익숙한 언어
langs: ['javascript', 'java', ' php']
});
console.debug(me.getFamiliarLanguage());
console.debug(me.getProfile())
me.setStatus('아 정말 바쁘네요.. ');
console.debug(me.getStatus());
코드에서 볼 수 있듯이 프로그래머 메소드를 호출할 때 new를 사용하지 않으며 this
this.name = cfg.name과 같은 속성 할당 코드가 있는 경우 new를 사용하여 호출하면(생성자 호출 메서드) 생성된 객체의 name 속성이 더 이상 표시되지 않습니다. 예:
코드 복사
코드는 다음과 같습니다.
// 여기서 메소드 이름의 첫 글자는 new Call
}); / 원래는 이름과 성별을 비공개로 만들고 비슷한 setter getter 메서드를 사용하고 싶었습니다. javaBean
alert(person1.name) // 'Andrew'
alert(person1.gender) // 'male'
위의 예에서 person1의 속성에 직접 액세스할 수 있음을 알 수 있지만 때로는 이를 나타내기 위해 코드 사양이나 규칙을 사용합니다. 우리가 정의하는 특정 속성은 비공개입니다. 예를 들어 this._name은 이름을 나타내기 위해 이런 방식으로 작성됩니다. 속성은 비공개입니다. 개인적으로는 타사 js 라이브러리에서 이것이 통합되는 한 좋은 방법이라고 생각합니다. , 이 메소드는 YUI2
와 같이 더 자주 사용될 수 있습니다. 초기 코드를 계속 살펴보면 이것이 사용되지 않지만 프로그래머 메소드에서 person을 호출한 후 그 역할을 볼 수 있습니다. , 그 사람이 가지고 있는 getName 및 getGender 메소드를 반환합니다. 그런 다음 프로그래머의 특정 요구 사항을 기반으로 확장합니다. 물론 프로그래머의 공유 메소드를 덮어쓸 수도 있습니다. 일부 개인 변수 및 메소드를 중앙 집중화합니다. JavaScript의 범위 및 폐쇄 메커니즘을 통해 코드의 that.getStatus 및 that.setStatus 메소드와 같이 확장된 메소드에서 처리 및 호출될 수 있습니다. .