자바 스크립트에서`#`기호는 무엇을합니까?
Nov 23 2020
#
표지판 이 포함 된 코드를 발견했습니다 . 그것은 무엇을 위해 사용됩니까? 코드는 다음과 같습니다.
class someObject{
#someMethod(){
//do something
}
}
답변
5 T.J.Crowder Nov 23 2020 at 20:05
이는 A의 인장 부재가 전용임을 나타낸다 (보다 오히려 운영자) -이 경우, A의 비공개 방법 뿐만 아니라 위해 사용되는 전용 필드 .
이를 선언하는 클래스 외부의 코드에서는 private 메서드 또는 private 필드를 사용할 수 없습니다. 예를 들면 :
class Example {
doSomething() {
this.#method("from doSomething"); // <== Works
}
#method(str) {
console.log("method called: " + str);
}
}
const e = new Example();
e.doSomething();
e.#method(); // <=== FAILS
3 Mr.Alien Nov 23 2020 at 20:05
이것은 실험적인 제안입니다. 다음을 사용하여 비공개 JavaScript 메서드를 정의 할 수 있습니다.#
자세한 내용은 MDN 문서를 참조하세요.
클래스 속성은 기본적으로 공용이며 클래스 외부에서 검사하거나 수정할 수 있습니다. 그러나 해시 접두사를 사용하여 개인 클래스 필드를 정의 할 수 있는 실험적인 제안 이
#
있습니다.
ES5를 사용하여 비슷한 것을 달성 할 수 있습니다 (단순하게 설명하기 위해). 여기서 Private 메서드 (JavaScript에는 기본적으로없는 메서드)와 같은 것을 시뮬레이션 할 수 있습니다.
예를 들면 :
function someObj() { //assuming this is a class definition
function someMethod() { //private method which is not accessible outside someObj
}
function init() { //initializes some methods or code, private methods can be used here
someMethod();
}
return {
init //only exposes the init method outside
}
}
위의 경우 으로 호출 될 수있는 의 init
메서드 만 노출 되지만 부모 메서드 외부에서는 액세스 할 수 없습니다.someObj
someObj.init()
someMethod
예:
someObj.init(); //works
someObj.someMethod(); //won't be accessible
1 Jondi Nov 23 2020 at 20:08
해시는 개인 클래스 필드를 정의하는 데 사용됩니다.