class ì ìì±(property)ë¤ì 기본ì ì¼ë¡ public íë©° class ì¸ë¶ìì ì½íê³ ìì ë ì ìë¤. íì§ë§, ES2019 ììë í´ì¬ #
prefix 를 ì¶ê°í´ private class íë를 ì ì¸í ì ìê² ëìë¤.
class ClassWithPrivateField {
#privateField;
}
class ClassWithPrivateMethod {
#privateMethod() {
return "hello world";
}
}
class ClassWithPrivateStaticField {
static #PRIVATE_STATIC_FIELD;
}
Examples Private static fields
private íëë class ì ì¸ë¬¸ ë´ë¶ì class ìì±ì(class constructor)ìì ì ê·¼ì´ ê°ë¥íë¤.
static ë©ìëììë§ static ë³ìë¤ì í¸ì¶í ì ìë¤ë ì ì½ì ê·¸ëë¡ ì ì§ëë¤.
class ClassWithPrivateStaticField {
static #PRIVATE_STATIC_FIELD;
static publicStaticMethod() {
ClassWithPrivateStaticField.#PRIVATE_STATIC_FIELD = 42;
return ClassWithPrivateStaticField.#PRIVATE_STATIC_FIELD;
}
}
console.assert(ClassWithPrivateStaticField.publicStaticMethod() === 42);
Private static íëë class evaluation ì class ìì±ì(class constructor)ì ì¶ê°ëë¤.
Private static íëë í´ë¹ íë를 ì ì¸í class ììë§ ì ê·¼í ì ìë¤.
ì´ë this
를 ì¬ì©í¨ì ìì´ ììì¹ ëª»í ëìì ì¼ê¸°í ì ìë¤.
class BaseClassWithPrivateStaticField {
static #PRIVATE_STATIC_FIELD;
static basePublicStaticMethod() {
this.#PRIVATE_STATIC_FIELD = 42;
return this.#PRIVATE_STATIC_FIELD;
}
}
class SubClass extends BaseClassWithPrivateStaticField {}
let error = null;
try {
SubClass.basePublicStaticMethod();
} catch (e) {
error = e;
}
console.assert(error instanceof TypeError);
Private instance fields
private ì¸ì¤í´ì¤ íëë # ì´ë¦ ('í´ì¬ ì´ë¦' ì¼ë¡ ë°ì), ì¦ #
prefix 를 ê°ì§ ìë³ìë¡ ì ì¸ëë¤. #
ì ê·¸ ì´ë¦ ìì²´ì ì¼ë¶ì´ë©° ì ì¸ê³¼ ì ê·¼ ìì 모ë ì¬ì©ëë¤.
캡ìí(encapsulation) ë ì¸ì´ë¡ë¶í° ê°ì ëë¤(enforced by the language). ì¦, scope ë°ìì #
ì´ë¦ì ì ê·¼íë ê²ì syntax error ì´ë¤.
class ClassWithPrivateField {
#privateField;
constructor() {
this.#privateField = 42;
this.#randomField = 444; // Syntax error
}
}
const instance = new ClassWithPrivateField();
instance.#privateField === 42; // Syntax error
Private Methods Private static methods
private static ë©ìëë public static ë©ìëì²ë¼ ì¸ì¤í´ì¤ê° ìë class ë¡ë¶í° í¸ì¶ëë¤. ê·¸ë¦¬ê³ private static íëì²ë¼ class ì ì¸ë¬¸ ë´ë¶ììë§ ì ê·¼ ê°ë¥íë¤.
private static ë©ìëë generator, async ê·¸ë¦¬ê³ async generator í¨ìê° ë ì ìë¤.
class ClassWithPrivateStaticMethod {
static #privateStaticMethod() {
return 42
}
static publicStaticMethod1() {
return ClassWithPrivateStaticMethod.#privateStaticMethod();
}
static publicStaticMethod2() {
return this.#privateStaticMethod();
}
}
console.assert(ClassWithPrivateStaticMethod.publicStaticMethod1() === 42);
console.assert(ClassWithPrivateStaticMethod.publicStaticMethod2() === 42);
ì´ë this
를 ì¬ì©í ë ììì¹ ëª»í ëìì ë°ììí¬ ì ìë¤. (ì´ë this
binding rule ì´ ì ì©ë기 ë문ì´ë¤.) ë¤ì ìììì Derived.publicStaticMethod2()
를 í¸ì¶í ë, this
ë class Derived
(Base
ê° ìëë¼) 를 ê°ë¦¬í¨ë¤.
class Base {
static #privateStaticMethod() {
return 42;
}
static publicStaticMethod1() {
return Base.#privateStaticMethod();
}
static publicStaticMethod2() {
return this.#privateStaticMethod();
}
}
class Derived extends Base {}
console.log(Derived.publicStaticMethod1()); // 42
console.log(Derived.publicStaticMethod2()); // TypeError
Private instance methods
private ì¸ì¤í´ì¤ ë©ìëë private ì¸ì¤í´ì¤ íëìë ë¤ë¥´ê² class ì¸ì¤í´ì¤ë¡ë¶í° ì ê·¼ ê°ë¥íë¤.
class ClassWithPrivateMethod {
#privateMethod() {
return "hello world";
}
getPrivateMessage() {
return this.#privateMethod();
}
}
const instance = new ClassWithPrivateMethod();
console.log(instance.getPrivateMessage());
// expected output: "hello world"
private ì¸ì¤í´ì¤ ë©ìëë generator, async ê·¸ë¦¬ê³ async generator í¨ìê° ë ì ìë¤. private getter ì setter ëí ê°ë¥íë¤:
class ClassWithPrivateAccessor {
#message;
get #decoratedMessage() {
return `â¨${this.#message}â¨`;
}
set #decoratedMessage(msg) {
this.#message = msg;
}
constructor() {
this.#decoratedMessage = "hello world";
console.log(this.#decoratedMessage);
}
}
new ClassWithPrivateAccessor();
// expected output: "â¨hello worldâ¨"
ëª
ì¸ì ë¸ë¼ì°ì í¸íì± javascript.classes.private_class_fields javascript.classes.private_class_fields_in javascript.classes.private_class_methods See also
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4