JavaScript 클래스의 개인 클래스 필드 및 방법

JavaScript 개인 클래스 필드와 메서드는 JavaScript 클래스의 새로운 기능입니다.이 강좌에서 이 기능에 대한 모든 정보를 알 수 있습니다.개인 방법과 클래스 필드가 무엇인지, 어떻게 작동하는지 알게 될 것입니다.프로젝트에서 그것을 어떻게 사용하는지 배울 것입니다.

소개하다.
JavaScript class 에 데이터를 추가하고 싶을 때, 클래스 속성을 통해 실현할 수 있습니다.기본적으로 이러한 속성은 항상 public입니다.이것 또한 그들이 공개적으로 방문하고 수정할 수 있다는 것을 의미한다.이것은 같은 종류의 방법에도 적용된다.기본적으로 그것들도 공공이다.
이것은 보통 가능하다.그러나, 때때로, 당신은 어떤 속성이나 방법의 사유성을 유지하기를 원할 수도 있습니다.클래스를 정의하는 것 외에 접근할 수 없기를 원할 수도 있습니다.이것은 개인적인 방법과 클래스 필드를 편리하게 사용할 수 있는 곳이다.

비밀에 부치다
어떤 일에 대해서는 비밀을 지키려는 생각이 간단명료하다.어떤 개인적인 것을 유지하고 싶을 때, 속성이든 방법이든 한 곳에서만 방문할 수 있어야 한다.이 위치는 이 속성이나 방법을 정의하는 클래스입니다.
다른 곳에서 개인 클래스 필드나 메서드에 액세스하려는 경우 JavaScript에서 허용할 수 없습니다.이것은 클래스 필드나 방법을 정의하는 클래스 외에 포함됩니다.이 종류의 어떤 실례도 될 수 있다.그러나 같은 클래스에서 개인 클래스 필드에 접근할 수 있습니다.

구문
개인 필드와 방법의 문법은 같다.이것도 매우 간단하고 논쟁이 많다.어떤 종류의 필드나 방법을private로 설명하려면 앞에 # (라벨 기호) 를 붙여야 합니다.이제 개인 방법과 클래스 필드, 그리고 그것을 어떻게 사용하는지 자세히 살펴보자.

개인 클래스 필드
개인 클래스를 설명하는 필드는 매우 간단합니다.클래스 필드의 이름 앞에 접두사 # 를 붙이기만 하면 됩니다.이것은 JavaScript에서 이 종류의 필드가 개인적이기를 원한다는 것을 알려 줍니다.이 개인 클래스 필드에 접근하려면 # 을 포함해야 한다는 것을 기억하십시오.
// Create new class
class MyClass {
  // Declare private class field
  #myPrivateField = 'I am private.'
}

사용 방법 개인 클래스 필드에 접근
클래스 속성에 접근하고 싶을 때 두 가지 선택이 있습니다.우선, 이 종류의 새로운 실례를 만들고 이 실례의 속성에 접근할 수 있습니다.그 다음에 당신은 이 속성을 static property로 성명할 수 있습니다.이 경우 속성에 액세스하기 위해 클래스를 인스턴스화할 필요가 없습니다.
개인 클래스 필드는 외부에서 접근할 수 없도록 설계되었습니다.이 점을 극복할 수 있는 방법이 있다.새로운 방법을 만들고 이 방법에서 개인 클래스 필드를 되돌릴 수 있습니다.이 방법을 공용 또는 static로 정의할 수 있습니다.
정적 속성과 마찬가지로, 실례화 클래스가 없는 상황에서 정적 방법을 사용할 수 있습니다.이 방법을public로 성명하려면, 반드시 이 종류를 실례화해야 한다.이후, 이 방법을 새로운 실례에서 호출하고,private field의 값을 얻을 수 있습니다.
// Create new class
class MyClass {
  // Declare private class field
  #myPrivateField = 'I am private.'

  // Define public method
  myMethod() {
    // Return the value of #myPrivateField
    return this.#myPrivateField
  }
}

// Create instance of MyClass
const myInstance = new MyClass()

try {
  // Try to call myMethod() on myInstance
  myInstance.myMethod()
  // Output:
  // 'I am private.'

  // Try to access the private field directly
  myInstance.#myPrivateField
  // Output:
  // SyntaxError: Private name #myPrivateField is not defined
} catch(error) {
  // Log any error
  console.log(error)
}

사용 방법 개인 클래스 필드 업데이트
개인 필드를 수정하려면 같은 규칙도 적용됩니다.너는 한 가지 방법을 통해 이 점을 해낼 수 있다.외부에서 이 방법을 호출할 수 있습니다.private class 필드에 접근해서 원하는 방식으로 수정할 수 있습니다.
// Create new class
class MyClass {
  // Declare private class field
  #myPrivateField

  // Define public method to return the private field
  returnPrivateField() {
    // Return the value of #myPrivateField
    return this.#myPrivateField
  }

  // Define public method to update the private field
  updatePrivateField(val) {
    // Update the value of #myPrivateField
    this.#myPrivateField = val
  }
}

// Create instance of MyClass
const myInstance = new MyClass()

try {
  // Try to call myMethod() on myInstance
  myInstance.updatePrivateField('Hello')

  // Try to access the private field directly
  myInstance.returnPrivateField()
  // Output:
  // 'Hello'
} catch(error) {
  // Log any error
  console.log(error)
}

setter와 Getter 및 개인 클래스 필드
우리가 토론한 바와 같이, 개인 필드는 외부에서 접근할 수 없다.따라서 getter and setter 액세서리는 쓸모가 없다.외부 JavaScript에서 개인 클래스 필드에 액세스하거나 수정하려고 하면 오류가 발생합니다.세터가 있든 없든 간에.
// Create new class
class MyClass {
  // Declare private class field
  #myPrivateField

  // Define setter method for the private field
  set myPrivateField(value) {
    // Return the value of #myPrivateField
    this.#myPrivateField = value
  }

  // Define getter method for the private field
  get myPrivateField() {
    // Return the value of #myPrivateField
    return this.#myPrivateField
  }
}

// Create instance of MyClass
const myInstance = new MyClass()

try {
  // Try to change the value of  call myMethod() on myInstance
  myInstance.#myPrivateField = 'Hi'
  // Output:
  // SyntaxError: Private name #myPrivateField is not defined

  // Try to access the private field directly
  myInstance.#myPrivateField
  // Output:
  // SyntaxError: Private name #myPrivateField is not defined
} catch(error) {
  // Log any error
  console.log(error)
}

개인 정적 클래스 필드
정적 방법으로 개인 클래스에 접근하는 것은 좀 복잡합니다.공통 클래스 필드와 방법은 클래스 실례를 통해서만 접근할 수 있습니다.그것들은 클래스 자체를 통해 접근할 수 없다.따라서 개인 필드에 접근할 수 있는 정적 방법을 만드는 것은 작동하지 않습니다.
만약 네가 시도한다면, 이 자바스크립트는 던질 것이다. TypeError이를 실현하는 방법의 하나는 개인 필드를 정적 필드로 성명하는 것이다.이제 클래스를 인스턴스화하지 않고도 Now static private class 필드에 정적 방법으로 액세스할 수 있습니다.
클래스 필드를 정적 필드로 표시하려면 static 키워드부터 시작해야 합니다.그리고 이 키워드 뒤에 클래스 필드 이름이 있습니다.개인 클래스 필드에서 이름의 접두사는 # 기호입니다.
// Alternative with static method
class MyClass {
  // Declare private class field as static
  static #myPrivateField = 'I am private.'

  // Define public method
  static myMethod() {
    // Return the value of #myPrivateField
    return this.#myPrivateField
  }
}

try {
  // Try to call myMethod() on MyClass
  MyClass.myMethod()
  // Output:
  // 'I am private.'

  // Try to access the private field directly
  // NOTE: this will never work
  MyClass.#myPrivateField
  // Output:
  // SyntaxError: Private name #myPrivateField is not defined
} catch(error) {
  // Log any error
  console.log(error)
}

개인 클래스 필드와 하위 클래스
우리가 논의한 바와 같이, 개인 클래스 필드와 방법은 모두 클래스를 정의하는 내부에서만 접근할 수 있다.이것은 또한 어떤 하위 클래스도 그것들에 접근할 수 없다는 것을 의미한다.이것은 공공 클래스 필드에도 적용되고 정적 개인 클래스 필드에도 적용된다.
// Create new class
class MyClass {
  // Declare private class field as static
  static #myPrivateField = 'I am private.'

  // Define static method that returns the private field
  static myMethod() {
    // Return the value of #myPrivateField
    return this.#myPrivateField
  }
}

// Create new subclass of MyClass
class MySubClass extends MyClass {}

try {
  // Try to call myMethod() on MySubClass
  MySubClass.myMethod()
  // Output:
  // TypeError: Private static access of wrong provenance

  // Try to access the private field directly on MySubClass
  // NOTE: this will never work
  MySubClass.#myPrivateField
  // Output:
  // SyntaxError: Private name #myPrivateField is not defined
} catch(error) {
  // Log any error
  console.log(error)
}


try {
  // Try to call myMethod() on MyClass
  MyClass.myMethod()
  // Output:
  // 'I am private.'

  // Try to access the private field directly on MyClass
  // NOTE: this will never work
  MyClass.#myPrivateField
  // Output:
  // SyntaxError: Private name #myPrivateField is not defined
} catch(error) {
  // Log any error
  console.log(error)
}

개인적 방법
개인 필드를 제외하고는 개인 방법을 만들 수 있습니다.개인 방법의 작업 규칙은 클래스 필드와 같다.이 방법들은 클래스를 정의하는 내부에서만 접근할 수 있습니다.이곳은 네가 그것들을 사용할 수 있는 유일한 곳이다.
외부에서private 방법을 호출하려면 private 클래스 필드와 같은 방법을 사용할 수 있습니다.새 퍼블릭 방법을 만들고 이 퍼블릭 방법에서private 방법을 호출할 수 있습니다.
사유 방법의 문법은 사유 필드의 문법과 같다.메서드의 이름은 항상 # 기호로 시작해야 합니다.
class MyClass {
  // Declare private class field
  #myPrivateField = 'I am private.'

  // Define private method that returns the private field
  #myPrivateMethod() {
    // Return the value of #myPrivateField
    return this.#myPrivateField
  }

  // Define public method that returns the private method
  myPublicMethod() {
    return this.#myPrivateMethod()
  }
}

// Create new instance of MyClass
const myInstance = new MyClass()

try {
  // Try to call myMethod() on myInstance
  myInstance.myPublicMethod()
  // Output:
  // 'I am private.'

  // Try to access the private field directly on myInstance
  // NOTE: this will never work
  MyClass.#myPrivateMethod()
  // Output:
  // SyntaxError: Private name #myPrivateMethod is not defined
} catch(error) {
  // Log any error
  console.log(error)
}

사유 정적 방법
사유 정적 필드와 같이 사유 정적 방법을 만들 수도 있습니다.이런 방법의 장점은 실례화류가 필요 없이 그것들을 호출할 수 있다는 것이다.사유 정태 방법에 대해 문법은 거의 공공 방법과 같다.
유일한 차이점은 지금 static 키워드부터 시작해야 한다는 것이다.다음은 다 똑같아요.방법명의 접두사는 # 기호와 함수체이다.
// Alternative with static method
class MyClass {
  // Declare static private class field
  static #myPrivateField = 'I am private.'

  // Define static private method that returns the private field
  static #myPrivateMethod() {
    // Return the value of #myPrivateField
    return this.#myPrivateField
  }

  // Define static public method that calls the private method
  static myPublicMethod() {
    return this.#myPrivateMethod()
  }
}

try {
  // Try to call myMethod() on MyClass
  MyClass.myPublicMethod()
  // Output:
  // 'I am private.'

  // Try to access the private field directly on MyClass
  // NOTE: this will never work
  MyClass.#myPrivateMethod()
  // Output:
  // SyntaxError: Private name #myPrivateMethod is not defined
} catch(error) {
  // Log any error
  console.log(error)
}

결론: JavaScript 클래스의 개인 클래스 필드 및 방법
일부 데이터의 사유성을 유지하려면, 사유 필드와 방법이 매우 편리합니다.나는 이 강좌가 무엇이 개인적인 방법과 클래스 필드인지, 그리고 그들이 어떻게 일을 하는지 설명하기를 바란다.나도 그것이 네가 너의 프로젝트에서 어떻게 이 두 가지 방법을 사용하는지 이해하는 데 도움을 줄 수 있기를 바란다.

좋은 웹페이지 즐겨찾기