ES2015의 Class에서 개인 인스턴스 변수
Symbols 를 이용합니다. 예를 들어 Person 클래스에서 「이름」 「연령」을 private 로 하고 싶은 경우는 다음과 같이 합니다.person.es6
const propName = Symbol();
const propAge = Symbol();
/**
 * Person class
 */
class Person {
  /**
   * @constructor
   * @param {string} name
   * @param {number} age
   */
  constructor(name, age) {
    this[propName] = name;
    this[propAge] = age;
  }
}
export default Person;
변수
propName 및 propAage는 고유하며 다른 방법으로 동일한 값을 생성할 수 없으며 이 파일 내에서만 액세스할 수 있습니다.이 예에서는 인스턴스 생성 시 '이름'과 '연령'을 설정한 후,
some.es6
import Person from './person.es6';
const person = new Person('Yamada', 45);
'이름' 또는 '연령'에 액세스할 수 없습니다.
「이름」 「연령」을
Person 클래스내의 메소드만으로 이용하는 경우는 이것으로 괜찮습니다만, 외부로부터 참조만 하고 싶은 경우는 Getter 를 준비하면 됩니다.person.es6
const propName = Symbol();
const propAge = Symbol();
/**
 * Person class
 */
class Person {
  /**
   * @constructor
   * @param {string} name
   * @param {number} age
   */
  constructor(name, age) {
    this[propName] = name;
    this[propAge] = age;
  }
  /**
   * @returns {string}
   */
  get name() {
    return this[propName];
  }
}
export default Person;
some.es6
import Person from './person.es6';
const person = new Person('Yamada', 45);
console.log(person.name); // Yamada が出力される
물론 Setter를 준비할 수도 있습니다. 하기의 예라고 건네받은 값을 그대로 세트 하고 있으므로 private 로 하고 있는 의미가 없습니다만, 사실은 값 체크를 사이에 두는 등.
person.es6
const propName = Symbol();
const propAge = Symbol();
/**
 * Person class
 */
class Person {
  /**
   * @constructor
   * @param {string} name
   * @param {number} age
   */
  constructor(name, age) {
    this[propName] = name;
    this[propAge] = age;
  }
  /**
   * @returns {string}
   */
  get name() {
    return this[propName];
  }
  /**
   * @param {string} name
   * @returns {void}
   */
  set name(name) {
    this[propName] = name;
  }
}
export default Person;
덤: private 메소드
생성자내에서 메소드 정의하지 않으면 안 되기 때문에 미묘합니다만.. 만약 그 private 메소드가 인스턴스 변수에 액세스 할 필요가 없는 경우는, 클래스 밖에서 정의하면 좋을지도 모릅니다.
const propName = Symbol();
const propAge = Symbol();
const propSomePrivateMethod = Symbol();
/**
 * Person class
 */
class Person {
  /**
   * @constructor
   * @param {string} name
   * @param {number} age
   */
  constructor(name, age) {
    this[propName] = name;
    this[propAge] = age;
    this[propSomePrivateMethod] = () => {
      console.log(`こんにちは、${this[propName]}さん。`);
    }
  }
  somePublicMethod() {
    // ...
    // private メソッドの呼び出し
    this[propSomePrivateMethod]();
  }
}
export default Person;
그 외 여담
Symbols private가 아닙니다. 하지만, 거기까지 신경쓰지 않아도 좋을까라는 느낌입니다. WebStorm 등의 IDE를 이용하고 있는 경우는
@private 어노테이션을 붙여 두면, 외부로부터 이용하려고 하면 IDE상에서 경고를 표시해 줍니다.Symbols 를 이용해 번잡해지는 것보다, 현실적으로는 이것으로 충분할지도 모릅니다^^; 메소드에도 @private 어노테이션을 부여할 수 있어요. person.es6
/**
 * Person class
 */
class Person {
  /**
   * @constructor
   * @param {string} name
   * @param {number} age
   */
  constructor(name, age) {
    /** @private */
    this.name = name;
    /** @private */
    this.age = age;
  }
}
export default Person;

Reference
이 문제에 관하여(ES2015의 Class에서 개인 인스턴스 변수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hkusu/items/e9bbf2e6281980050d3d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)