>  기사  >  웹 프론트엔드  >  JavaScript의 프로토타입 정의 함수에서 비공개 멤버 변수에 어떻게 액세스할 수 있나요?

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

Patricia Arquette
Patricia Arquette원래의
2024-10-27 03:11:30493검색

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

프로토타입 정의 함수에서 전용 멤버 변수에 액세스

JavaScript에서 생성자 내에 선언된 전용 변수는 메서드에 직접 액세스할 수 없습니다. 프로토타입에 정의되어 있습니다. 이 시나리오는 다음 코드 조각에서 볼 수 있습니다.

TestClass = function(){
  var privateField = "hello";
  this.nonProtoHello = function(){alert(privateField)};
};
TestClass.prototype.prototypeHello = function(){alert(privateField)};

// This executes successfully:
t.nonProtoHello()

// This fails:
t.prototypeHello()

이 동작은 생성자 내에 정의된 메서드가 정의된 범위에 대한 액세스로 인해 전용 변수에 액세스할 수 있기 때문에 발생합니다. 그러나 프로토타입 정의 메서드는 생성자의 범위 내에서 생성되지 않으며 해당 지역 변수에 대한 액세스가 부족합니다.

액세스 요구 사항 해결

직접적인 방법은 없지만 프로토타입 정의 메서드에 대한 개인 변수에 대한 액세스 권한을 부여하려면 원하는 기능을 달성하기 위한 대체 접근 방식이 있습니다.

  • Getter 및 Setter: 이 객체에 getter 및 setter를 생성하여 개인 변수에 대한 제어된 액세스를 제공합니다. 프로토타입 정의 메서드와 객체에 액세스할 수 있는 다른 코드는 이러한 getter 및 setter를 활용할 수 있습니다.

예:

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

  // private
  var secret = secret;

  // public methods with controlled access
  this.setSecret = function(s) {
    secret = s;
  }

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

// Prototype-defined method using getters
Person.prototype.spillSecret = function() { alert(this.getSecret()); };
  • 간접 액세스: 프로토타입 정의 메서드는 전용 변수에 직접 액세스할 수 없지만 액세스 권한이 있는 래퍼 함수와 상호 작용할 수 있습니다. 이를 통해 프라이빗 변수를 프로토타입에 직접 노출하지 않고도 간접 액세스가 가능합니다.

요약하면 프로토타입 정의 메서드에서 프라이빗 변수에 액세스하는 것은 본질적으로 제한되어 있지만 getter 및 setter를 사용하거나 간접 액세스를 사용하면 유연한 솔루션이 제공됩니다. 이러한 변수에 대한 액세스를 제어할 수 있습니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.