JavaScript의 공개, 비공개 및 특권 모드_javascript 팁
- WBOY원래의
- 2016-05-16 18:37:541416검색
요약 프라이빗 변수는 'var' 키워드를 사용해 객체 내부에 선언되며, 프라이빗 함수와 권한 있는 메서드를 통해서만 접근할 수 있습니다.
비공개 함수는 객체의 생성자에서 선언됩니다(또는 var functionName=function(){...}을 통해 정의됨). 이는 권한 있는 함수(객체의 생성자 포함) 및 비공개 함수에 의해 호출될 수 있습니다.
권한 있는 메서드는 this.methodName=function(){...}을 통해 선언되며 개체 외부의 코드로 호출될 수 있습니다. 다음을 사용할 수 있습니다. this.privileged function() 메소드를 사용하여 권한 있는 함수를 호출하고, private function() 메소드를 사용하여 비공개 함수를 호출합니다.
공용 속성은 this.variableName을 통해 정의되며 객체 외부에서 읽고 쓸 수 있습니다. 개인 함수에서는 호출할 수 없습니다.
공용 메서드는 ClassName.prototype.methodName=function(){...}으로 정의되며 개체 외부에서 호출할 수 있습니다.
프로토타입 속성은 ClassName.prototype.propertyName=someValue로 정의됩니다.
정적 속성은 ClassName.propertyName=someValue로 정의됩니다.
이 작성 방법도 주의하세요: var function name = function function name () {...} 이 함수는 호출 시 특권 함수와 비공개 함수의 특성을 갖습니다.
예:
>< ;div onclick="start()" style="color:blue">나를 클릭하세요 JavaScript 세상에서 가장 오해받는 프로그래밍 언어입니다. 어떤 사람들은 JavaScript 개체가 개인 변수에 대한 메서드를 가질 수 없기 때문에 정보 숨기기 기능이 부족하다고 주장합니다.
그러나 이것은 오해입니다. JavaScript 객체는 비공개 멤버를 가질 수 있습니다.
객체
JavaScript는 기본적으로 객체에 관한 것입니다. 배열도 객체이고, 메소드도 객체이고, 객체도 객체입니다. 객체란 무엇입니까? 객체는 키-값 쌍의 모음입니다. 키는 문자열이고
값은 문자열, 숫자, 부울 및 객체(배열 및 메서드 포함)가 될 수 있습니다. 객체는 일반적으로 값을 빠르게 검색할 수 있도록 해시테이블로 구현됩니다.
값이 함수라면 메소드라고 부를 수 있습니다. 개체의 메서드가 호출되면 "this" 변수가 개체에 할당됩니다. 메서드는 "this" 변수를 통해 인스턴스
변수에 액세스할 수 있습니다.
객체 초기화 방법인 생성자를 통해 객체를 생성할 수 있습니다. 생성자는 정적 변수 및 메서드를 포함하여 클래스가 다른 프로그래밍 언어에서 제공하는 기능을 제공합니다.
공개
오브젝트의 구성원은 모두 공개 구성원입니다. 모든 개체는 이러한 구성원에 액세스, 수정, 삭제하거나 새 구성원을 추가할 수 있습니다. 새 개체에 멤버를 배치하는 두 가지 주요 방법이 있습니다.
생성자에서
이 기술은 일반적으로 공용 인스턴스 변수를 초기화하는 데 사용됩니다. 생성자의 "this" 변수는 개체에 멤버를 추가하는 데 사용됩니다.
Java 코드
코드 복사
코드는 다음과 같습니다.
이런 식으로 새 객체 var myContainer = new Container('abc')를 생성하면 myContainer.member는 'abc'입니다.
프로토타입에서
이 기술은 일반적으로 공개 메소드를 추가하는 데 사용됩니다. 멤버를 찾을 때 해당 멤버가 개체 자체에 없으면 개체 생성자의 프로토타입 멤버에서 찾습니다.
상속에는 프로토타입 메커니즘이 사용됩니다. 생성자가 생성한 모든 객체에 메소드를 추가하려면 생성자의 프로토타입에
Java 코드
코드 복사
를 추가하면 됩니다. 코드는 다음과 같습니다.
Container.prototype.stamp = 함수(문자열) {
return this.member string;
}
Container.prototype.stamp = 함수(문자열) {
이를 반환합니다. member string;
}
이런 방식으로 myContainer.stamp('def') 메서드를 호출할 수 있으며 결과는 'abcdef'입니다.
비공개
비공개 멤버는 생성자에 의해 생성됩니다. 일반적인 var 변수와 생성자 매개변수를 전용 멤버라고 합니다.
Java 코드
function Container(param ) {
this.member = param;
var secret = 3;
var that = this
}
function Container(param) {
this.member = param; 🎜>var secret = 3;
var that = this;
}
생성자는 param, secret 및 that이라는 3개의 개인 인스턴스 변수를 생성합니다. 객체에 추가되지만 외부에서 접근할 수 없으며 객체 자체의
공개 메서드를 통해서도 접근할 수 없습니다. 프라이빗 메서드로만 액세스할 수 있습니다. 개인 메소드는 생성자의 내부 메소드입니다.
Java 코드
function Container(param ) {
function dec() {
if (비밀 > 0) {
비밀 -= 1; return true;
} else {
false 반환; }
}
this.member = param;
var secret = 3;
var that = this;
}
function Container(param) {
function dec() {
if (비밀 > 0) {
비밀 -= 1;
true를 반환
} else {
false를 반환
}
.member = param;
var secret = 3;
var that = this;
}
비밀 인스턴스 변수를 확인합니다. 0보다 크면 비밀을 감소시키고 true를 반환하고, 그렇지 않으면 false를 반환합니다. 이 개체의 사용을 3번으로 제한하는 데 사용할 수 있습니다.
평소와 마찬가지로 private that 변수를 정의합니다. 이는 이 개체를 개인 메서드에서 사용할 수 있도록 만드는 데 사용됩니다. 이는 ECMAScript 언어 사양에 버그가 있기 때문에 발생합니다.
이 버그로 인해 내부 메서드에 대한 올바른 설정이 방해됩니다.
개인 메서드는 공용 메서드로 호출할 수 없습니다. 프라이빗 메서드를 유용하게 만들려면 특권 메서드를 도입해야 합니다.
권한 있는
권한 있는 메서드는 전용 변수와 메서드에 액세스할 수 있으며, 그 자체로 공용 메서드와 외부 세계에서 액세스할 수 있습니다. 권한 있는 메서드는 제거하거나 교체할 수 있지만
변경하거나 비밀을 공개하도록 강요할 수는 없습니다.
권한 있는 메소드는 생성자에서 이를 사용하여 할당됩니다.
Java 코드
코드 복사
if (비밀 > 0) {
비밀 -= 1; return true;
} else {
false 반환; }
}
this.member = param;
var secret = 3;
var that = this;
this.service = function() {
if (dec()) {
return that.member
} else {
return null
}
}
function Container(param) {
function dec() {
if (비밀 > 0) {
비밀 -= 1;
true를 반환
} else {
false를 반환
}
.member = param;
var secret = 3;
var that = this;
this.service = function() {
if (dec()) {
return that.member;
} else {
return null;
}
}
}
service는 권한 있는 메서드입니다. myContainer.service()에 대한 처음 세 번의 호출은 'abc'를 반환합니다. 그 후에는 null을 반환합니다. 서비스는 개인 dec 메서드를 호출하고
dec 메서드는 개인 비밀 변수에 액세스합니다. 서비스는 다른 개체 및 메서드에 표시되지만 개인 변수에 대한 직접 액세스는 허용하지 않습니다.
클로저
자바스크립트에는 클로저가 있으므로 퍼블릭, 프라이빗, 권한 있는 멤버의 패턴이 가능합니다. 즉, 외부 메서드가 반환된 후에도 내부 메서드는 항상 외부 메서드의
var 변수 및 매개변수에 액세스할 수 있습니다. 이는 JavaScript 언어의 매우 강력한 기능입니다. 현재 이 기능을 활용하는 방법을 보여주는 JavaScript
프로그래밍 책은 없으며 대부분은 언급조차 하지 않습니다.
개인 및 권한 있는 구성원은 개체가 생성될 때만 생성될 수 있습니다. 공개 회원은 언제든지 추가할 수 있습니다.
모드
공개
Java 코드
코드 복사
코드는 다음과 같습니다.
}
Constructor.prototype.membername = 값
비공개
Java 코드
function Constructor( ...) {
var that = this;
var membername = value
function membername(...) {...}
}
// 참고: function 문
// function membername(...) {...}
// 다음 코드의 약어입니다
// var membername = function membername(...) {... };
함수 생성자(...) {
var that = this;
var membername = value
function membername(...) {...}
}
// 참고: 함수문
// function membername(...) {...}
//은 다음 코드의 약어입니다.
// var membername = function membername(... ) {...};
특권
Java 코드
function Constructor(...) {
this.membername = function (...) {...};
}
function Constructor( ...) {
this.membername = function (...) {...}
}
역자 주: 권한 있는 메서드는 간단히 다음과 같이 간주할 수 있다고 생각합니다. 생성자의 공개 메소드. 권한 있는 메소드는 외부 세계와 공개 메소드
에서 액세스할 수 있고 자체적으로 비공개 변수에 액세스할 수 있기 때문입니다.