рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд┐рд░ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ:
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдиреАрдЪреЗ:
class A {
protected static type: string;
public log(): string {
console.log(this.type);
}
}
class B extends A {
protected static type: string = 'C';
}
class C extends A {
protected static type: string = 'C';
}
b = new B();
b.log(); // => 'B'
c = new C();
c.log(); // => 'C'
рд╣рдо рдЗрд╕реЗ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ this.type
рдХрд╛ рдЙрдкрдпреЛрдЧ type
рдирд╛рдордХ _instance_ рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ _static_ рд╕рдВрдкрддреНрддрд┐ред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
class A {
"constructor": typeof A; // Explicitly declare constructor property
protected static type: string;
public log() {
console.log(this.constructor.type); // Access actual constructor object
}
}
class B extends A {
protected static type: string = 'B';
}
class C extends A {
protected static type: string = 'C';
}
let b = new B();
b.log(); // => 'B'
let c = new C();
c.log(); // => 'C'
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдЙрджрд╛рд╣рд░рдг рдХреА constructor
рд╕рдВрдкрддреНрддрд┐ Function
, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдХреЗ рдХрд┐рд╕реА рд╡рд░реНрдЧ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдРрд╕рд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдЖрдк this.constructor.xxx
рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдЙрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдг рдорд┐рд▓реЗрдВрдЧреЗ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрдВрд╕реНрдЯреЗрдВрд╕ (рдпрд╛рдиреА рд╡реНрдпреБрддреНрдкрдиреНрди рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ) рдмрдирд╛рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣рдо рдЗрд╕реЗ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐
this.type
рдХрд╛ рдЙрдкрдпреЛрдЧtype
рдирд╛рдордХ _instance_ рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ _static_ рд╕рдВрдкрддреНрддрд┐редрд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдЙрджрд╛рд╣рд░рдг рдХреА
constructor
рд╕рдВрдкрддреНрддрд┐Function
, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдХреЗ рдХрд┐рд╕реА рд╡рд░реНрдЧ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдРрд╕рд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдЖрдкthis.constructor.xxx
рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдЙрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдг рдорд┐рд▓реЗрдВрдЧреЗ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрдВрд╕реНрдЯреЗрдВрд╕ (рдпрд╛рдиреА рд╡реНрдпреБрддреНрдкрдиреНрди рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ) рдмрдирд╛рддрд╛ рд╣реИред