реЮреАрд▓реНрдб
рдХреНрд▓рд╛рд╕ рдлрд╝реАрд▓реНрдб рдХрд╛ рдПрд▓рд╛рди рд╕реАрдзреЗ рдХреНрд▓рд╛рд╕ рдХреЗ рдореБрдЦреНрдп рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рдлрд╝ рддреМрд░ рдкрд░ рдирд╣реАрдВ
рдХреЛ this
рд╡реИрд▓реНрдпреВ рдХреА рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рддреМрд░ рдкрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирддреАрдЬрд╛ рдпрд╣реА рд╣реЛрддрд╛ рд╣реИ:
рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдЙрд╕реА рдХреНрд▓рд╛рд╕ рдХреЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ.
class MyClass {
myField;
}
const myClassInstance = new MyClass();
myClassInstance;
> MyClass { myField: undefined }
рд╡реИрд▓реНрдпреВ рд╡рд╛рд▓реЗ рдлрд╝реАрд▓реНрдб рдХреЛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдпрд╣ рдЕрдХреНрд╕рд░ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХреНрд▓рд╛рд╕ рдХреЗ рдЕрдВрджрд░ рдореМрдЬреВрдж рд▓реЙрдЬрд┐рдХ, рдЗрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
class MyClass {
myResult = false;
set setValue( myValue ) {
this.myResult = myValue;
}
}
const myClassInstance = new MyClass();
myClassInstance;
> Object { myResult: false }
myClassInstance.setValue = true;
myClassInstance;\
> Object { myResult: true }
рдХреНрд▓рд╛рд╕ рдлрд╝реАрд▓реНрдб, рдХреНрд▓рд╛рд╕ рд╕реЗ рдЬреБрдбрд╝реА рдкреНрд░реЙрдкрд░реНрдЯреА рдХреА рддрд░рд╣ рд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ
this
рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ. рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ
рдХреНрд▓рд╛рд╕ рдХреА рддрд░рд╣ рд╣реА рдХрд░рддреЗ рд╣реИрдВ.
class MyClass {
myField = true;
}
const myClassInstance = new MyClass();
myClassInstance.myField;
> true
myClassInstance.myField = false;
myClassInstance.myField;
> false;
рдлрд╝реАрд▓реНрдб, рдХреНрд▓рд╛рд╕ рдХреА рдХреБрдЫ рдЬрд╝реНрдпрд╛рджрд╛ рдмреЗрд╣рддрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЖрдзрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ.
рдирд┐рдЬреА рдлрд╝реАрд▓реНрдб рдФрд░ рддрд░реАрдХреЗ
рдХреНрд▓рд╛рд╕ рдХреЗ рдмрд╛рд╣рд░ рдирд┐рдЬреА рдлрд╝реАрд▓реНрдб рдФрд░ рддрд░реАрдХреЛрдВ рдХреЛ рдРрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛. рдирд┐рдЬреА рдкреНрд░реЙрдкрд░реНрдЯреА, рдХреНрд▓рд╛рд╕ рдХреЗ рдПрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИ. рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдЗрд╕рдореЗрдВ рдХреНрд▓рд╛рд╕ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ, рдирд┐рдЬреА рдлрд╝реАрд▓реНрдб рдФрд░ рддрд░реАрдХреЛрдВ рдХрд╛ рдЕрдкрдирд╛ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ.
рдХрд┐рд╕реА рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдирд┐рдЬреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ #
рдЬреЛрдбрд╝реЗрдВ, рдЬрдм
рдЗрд╕рдХрд╛ рдПрд▓рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
class MyClass {
#myPrivateField = true;
#myPrivateMethod() {}
}
const myClassInstance = new MyClass();
myClassInstance;
> MyClass { #myPrivateField: true }
#myPrivateField: true
<prototype>: Object { тАж }
constructor: class MyClass {}
<prototype>: Object { тАж }
рд╢рд╛рдорд┐рд▓ рдХреНрд▓рд╛рд╕ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рдПрдХ рдирд┐рдЬреА рдлрд╝реАрд▓реНрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП. рдЖрдк
рдЗрд╕рдХреА рд╡реИрд▓реНрдпреВ рдХреЛ рдмрд╛рдж рдореЗрдВ, this
рдХреА рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рддреМрд░ рдкрд░ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
this
рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ.
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рд╕реЗ рдирд┐рдЬреА рдлрд╝реАрд▓реНрдб рдХреЛ рдРрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛. рдЗрд╕рдХреА рд╡рдЬрд╣ рд╕реЗ, рдбреЗрдЯрд╛ рдЦрд░реНрдЪ рдирд╣реАрдВ рд╣реЛ рдкрд╛ рд░рд╣рд╛ рд╣реИ рджреА рдЧрдИ рдЧреИрдЯрд░ рдФрд░ рд╕реЗрдЯрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд╣рд░ рдмрджрд▓реА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдпрд╣ рд╕реАрдзреЗ рддреМрд░ рдкрд░ рд╕рд┐рд░реНрдлрд╝ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдп рдХрд┐рдП рдЧрдП рддрд░реАрдХреЗ.
class MyClass {
#myResult = false;
set setValue( myValue ) {
this.#myResult = myValue;
}
}
const myClassInstance = new MyClass();
myClassInstance;
> MyClass { #myResult: false }
myClassInstance.#myResult = true;
> Uncaught SyntaxError: reference to undeclared private field or method #myResult
myClassInstance.setValue = true;
myClassInstance;\
> MyClass { #myResult: true }
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдЖрдо рддреМрд░ рдкрд░, рдбреЗрд╡рд▓рдкрд░ рдХрдВрд╕реЛрд▓ рдЕрдиреБрдорддрд┐ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИ. рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА рдлрд╝реАрд▓реНрдб рдХрд╛ рдРрдХреНрд╕реЗрд╕ рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордХрд╕рдж:
class MyClass {
#myPrivateField = true;
#myPrivateMethod() {
console.log( "This is inside a private method." );
}
}
const myClassInstance = new MyClass();
myClassInstance;
> MyClass {#myPrivateField: true}
myClassInstance.#myPrivateField;
> true
myClassInstance.#myPrivateMethod();
> "This is inside a private method."
class MyClass {
#myPrivateField = true;
#myPrivateMethod() {
console.log( "This is inside a private method." );
}
}
const myClassInstance = new MyClass();
myClassInstance;
> MyClass {#myPrivateField: true}
myClassInstance.#myPrivateField;
> Uncaught SyntaxError: reference to undeclared private field or method #myPrivateField
myClassInstance.#myPrivateMethod();
> Uncaught SyntaxError: reference to undeclared private field or method #myPrivateMethod
рдирд┐рдЬреА рдлрд╝реАрд▓реНрдб, рдХреНрд▓рд╛рд╕ рдХреЗ рдЙрди рдореБрдЦреНрдп рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╡реЗ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЪрд╛рдЗрд▓реНрдб рдХреНрд▓рд╛рд╕ рднреА рдкреИрд░рдВрдЯ рдХреНрд▓рд╛рд╕:
class MyClass {
#myPrivateField = true;
}
class ChildClass extends MyClass {
childMethod() {
console.log( this.#myPrivateField );
}
}
> Uncaught SyntaxError: reference to undeclared private field or method #myPrivateField
рд╕реНрдЯреИрдЯрд┐рдХ рдлрд╝реАрд▓реНрдб рдФрд░ рддрд░реАрдХреЗ
рд╕реНрдЯреИрдЯрд┐рдХ рдлрд╝реАрд▓реНрдб рдФрд░ рдореЗрдердб, рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рджрд╕реНрдп рд╣реЛрддреЗ рд╣реИрдВ, рди рдХрд┐ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП. рдЗрд╕ рдХрд╛рд░рдг, рд╕реНрдерд┐рд░ рдлрд╝реАрд▓реНрдб рдПрдХ рдХреЗрдВрджреНрд░реАрдп рдЙрд╕ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯ рдЬреЛ рдХреНрд▓рд╛рд╕ рдХреЗ рд╣рд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд▓рд┐рдП рдпреВрдиреАрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреА рдЬрд╝рд░реВрд░рдд рдкрдбрд╝ рд╕рдХрддреА рд╣реИтАФрдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реЗрдпрд░ рдХреА рдЧрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЬрд╛рдирдХрд╛рд░реА. рд╕реНрдереИрддрд┐рдХ рддрд░реАрдХреЗ рдЕрдХреНрд╕рд░ рдХрд┐рд╕реА рдпреВрдЯрд┐рд▓рд┐рдЯреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ, рдЬреИрд╕реЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдореМрдЬреВрдж рдХрд┐рд╕реА рдлрд╝реАрд▓реНрдб рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдЙрдирдХреЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдо рд╕реЗ рд▓рдЧрд╛рдирд╛.
рдХреНрд▓рд╛рд╕ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рд╕реНрдЯреИрдЯрд┐рдХ рдлрд╝реАрд▓реНрдб рдФрд░ рдореЗрдердб рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, static
рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ
рдХреАрд╡рд░реНрдб:
class MyClass {
static myStaticField;
static myStaticMethod() {}
}
const myClassInstance = new MyClass();
рд╕реНрдЯреИрдЯрд┐рдХ рддрд░реАрдХрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЙрдЯ рдиреЛрдЯреЗрд╢рди рдХрд╛ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
class MyClass {
constructor() {}
}
MyClass.myStaticMethod = function() {}
рдХреНрд▓рд╛рд╕ рдХреЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ рд╕реНрдЯреИрдЯрд┐рдХ рдкреНрд░реЙрдкрд░реНрдЯреА рдРрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреАрдВ, рд▓реЗрдХрд┐рди рдпреЗ рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ:
class MyClass {
static myStaticField = true;
static myStaticMethod() {
console.log( "A static method." );
}
}
const myClassInstance = new MyClass();
myClassInstance.myStaticField;
> undefined
myClassInstance.myStaticMethod();
> Uncaught TypeError: myClassInstance.myStaticMethod is not a function
MyClass.myStaticField;
> true
MyClass.myStaticMethod();
> "A static method."
рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдЯреИрдЯрд┐рдХ рддрд░реАрдХреЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИ рдХреНрд▓рд╛рд╕ рдХреЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдПрдВ рдмрдирд╛рдирд╛. рдЗрд╕рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рдореЗрдВ рдХреНрд▓рд╛рд╕ рдХреЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдХреНрд░рдо рд╕реЗ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреИрдЯрд┐рдХ рддрд░реАрдХрд╛ рдпрд╛ рдХреЛрдИ рд╕реНрдЯреИрдЯрд┐рдХ рддрд░реАрдХрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдЬрд╝рд░реВрд░реА рд╕реЗрдЯрдЕрдк рд╢рд╛рдорд┐рд▓ рд╣реЛ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдХреНрд▓рд╛рд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИ:
class User {
constructor( name, email ) {
this.name = name;
this.email = email;
}
static fromObject( myObject ) {
return new User( myObject.name, myObject.email ?? "Omitted" );
}
}
const userObject = {
"name" : "My Name",
"email" : "my@email.address"
};
const secondUserObject = {
"name" : "My Name"
};
const firstUser = User.fromObject( userObject );
const secondUser = User.fromObject( secondUserObject );
firstUser;
> Object { name: "My Name", email: "my@email.address" }
secondUser;
> Object { name: "My Name", email: "Omitted" }
рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рддрдирд╛ рд╕рдордЭ рдЖрдпрд╛ рд╣реИ
рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдлрд╝реАрд▓реНрдб рдХреЛ рд╕рд┐рд░реНрдлрд╝ рдпрд╣рд╛рдВ рд╕реЗ рдРрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреА рдорджрдж рд╕реЗ рдХреИрд╕реЗ рдореИрдиреЗрдЬ рдХрд░реЗрдВ?
Static fields