JavaScript의 프로토타입 정의 함수에서 개인 변수에 어떻게 액세스할 수 있나요?

Susan Sarandon
풀어 주다: 2024-10-27 20:16:30
원래의
765명이 탐색했습니다.

How can you access private variables from prototype-defined functions in JavaScript?

JavaScript 함수 정의의 액세스 제한

JavaScript에서 함수에 대한 변수의 접근성은 함수가 정의된 범위에 따라 다릅니다. 생성자 내부에 선언된 전용 변수는 해당 생성자의 범위 내의 함수에만 액세스할 수 있습니다. 이로 인해 프로토타입 속성을 사용하는 등 생성자 외부에서 함수가 정의될 ​​때 제한이 발생합니다.

프로토타입 정의 함수 및 전용 변수

다음 코드를 고려하세요. TestClass에는 개인 변수 privateField가 있습니다.

TestClass = function(){
    var privateField = "hello";
    this.nonProtoHello = function(){alert(privateField)};
};
TestClass.prototype.prototypeHello = function(){alert(privateField)};
로그인 후 복사

이 예에서 생성자 내에 정의된 nonProtoHello는 privateField에 액세스할 수 있지만 프로토타입을 사용하여 정의한 프로토타입Hello는 액세스할 수 없습니다. 이는 프로토타입에 정의된 함수가 생성자의 범위 내에 정의되지 않았기 때문입니다.

개인 변수 액세스 재정의

프로토타입 정의 함수가 직접적으로 접근하도록 허용하는 것은 불가능합니다. 개인 변수에 액세스합니다. 이는 본질적으로 JavaScript에서 지원되지 않는 역방향 범위 지정 메커니즘을 생성합니다.

대안: Getters 및 Setters

프로토타입 정의 함수를 활성화하여 개인 변수를 조작하려면, 이 객체를 사용하여 생성자 내에서 getter 및 setter를 만들 수 있습니다. 이러한 공용 메소드는 개인 변수에 액세스할 수 있으며 프로토타입 함수에 의해 해당 변수가 변경되도록 허용합니다. 예는 다음과 같습니다.

function Person(name, secret) {
    // public
    this.name = name;

    // private
    var secret = secret;

    // public methods have access to private members
    this.setSecret = function(s) {
        secret = s;
    }

    this.getSecret = function() {
        return secret;
    }
}

// Must use getters/setters 
Person.prototype.spillSecret = function() { alert(this.getSecret()); };
로그인 후 복사

위 내용은 JavaScript의 프로토타입 정의 함수에서 개인 변수에 어떻게 액세스할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!