JavaScript 클래스의 개인 클래스 필드 및 방법
23826 단어 javascripttutorialwebdevbeginners
소개하다.
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 클래스의 개인 클래스 필드 및 방법
일부 데이터의 사유성을 유지하려면, 사유 필드와 방법이 매우 편리합니다.나는 이 강좌가 무엇이 개인적인 방법과 클래스 필드인지, 그리고 그들이 어떻게 일을 하는지 설명하기를 바란다.나도 그것이 네가 너의 프로젝트에서 어떻게 이 두 가지 방법을 사용하는지 이해하는 데 도움을 줄 수 있기를 바란다.
Reference
이 문제에 관하여(JavaScript 클래스의 개인 클래스 필드 및 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/alexdevero/private-class-fields-and-methods-in-javascript-classes-3a80텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)