Typescript: рдХрдХреНрд╖рд╛ рдкрд░ рд╕реНрдерд┐рд░ 'рд▓рдВрдмрд╛рдИ' рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдЕрдЧре░ 2014  ┬╖  22рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: microsoft/TypeScript

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

class C {
    static length ()  { return "twelve"; }
}

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЙрддреНрдкрдиреНрди рдХреЛрдб рдореЗрдВ:

var C = (function () {
    function C() {
    }
    C.length = function () {
        return "twelve";
    };
    return C;
})();

рдпрд╣рд╛рдВ, рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ length рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ (рдХрдо рд╕реЗ рдХрдо рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдФрд░ рдХреНрд░реЛрдо рдореЗрдВ), рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдмрд╛рдж рдореЗрдВ C.length() рдХреЙрд▓ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддреА рд╣реИред рд╢рд╛рдпрдж рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдлрд╝рдВрдХреНрд╢рди length рдХреЙрд▓ рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдЕрд╕реНрд╡реАрдХреГрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдХреЛрдбрдкреНрд▓реЗрдХреНрд╕ рдЕрдВрдХ #1260 рд╕реЗ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

Bug Fixed good first issue help wanted

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЗрд╕ рдмреАрдЪ ES6 / 2015 рджреЗрд╢реА рд╕рдорд░реНрдерди рдХреНрд░реЛрдо рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдЙрддрд░рд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпреЗ рдореБрджреНрджреЗ рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ @ nicolo-ribaudo рдХреЗ рдХрд░реАрдм рдЖрддрд╛ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИ (рджреЗрдЦреЗрдВ # 9778)ред

рджреЗрд╢реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдирд┐рдкреЗрдЯ:

class Foo {
    constructor() {}
}
class Bar {
    static length() {}
    static name() {}
    static caller() {}
}
Foo.name = "FooChanged";
Bar.name = "Baz";

console.log(Foo.name) // Logs "Foo". Foo.name remains unwritable
console.log(Bar.name) // Logs "Baz".  Bar.name became writable

name , length рдФрд░ caller рд░реАрдбреЛрдирд▓реАрдиреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд╕рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣рдо рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЧреБрдг рдПрдХ рдмрд╛рд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ рд╣рдордиреЗ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ ( рдПрдордбреАрдПрди рдкрд░ рдореЗрд░реА Function.name рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЦрддрд░рдирд╛рдХ рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

рддреЛ @nicolo-ribaudo рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП Object.defineProperty рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдореВрд▓ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдХрд░рдг рд╣реЛрдЧрд╛ред рдПрдХ рдмрд╛рдд рдЬрд┐рд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреБрд░рд╛рдиреЗ рд▓реЗрдХрд┐рди ES5 рд╕рдВрдЧрдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдиреЗ рдЧреБрдгреЛрдВ рдХреЛ configurable: false рд╕реЗрдЯ рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ writable: true рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдЙрдирдХреЗ рд▓рд┐рдП рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧреА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Function.name рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рджреЗрдЦреЗрдВ)

рдЪреАрдЬреЛрдВ рдХреЛ рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдореЗрд░реА рд░рд╛рдп рдереА:

  • рд╣рдо рд╕рдВрдХрд▓рди-рд▓рдХреНрд╖реНрдп es3 рд▓рд┐рдП Object.defineProperty() рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред Object.defineProperty рдмрд┐рдирд╛, ES5 рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ ES3 рдХреЛрдб рдЪрд▓рд╛рдиреЗ рд╕реЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреАред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ es3 рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  • рд╕рдВрдХрд▓рди-рд▓рдХреНрд╖реНрдп es5 рд▓рд┐рдП рдЗрд╕реЗ Object.defineProperty() рдФрд░ writable: true рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА/рддреНрд░реБрдЯрд┐ рдЬрд╛рд░реА рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрди рд╕рдВрдкрддреНрддрд┐ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ x of version <= y рдХрд┐, рдпрджрд┐ рдЗрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЛ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╕рдмрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд┐рдХрд▓реНрдк рджреВрд╕рд░рд╛ рдирд╛рдо рдЪреБрдирдирд╛ рдерд╛ред
  • рдпрджрд┐ рдЖрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред

рд╕рдВрдХрд▓рди рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджреЗрд╢ рдЖрдЬ рдХреА рд╕реНрдерд┐рддрд┐ (рдЯреАрдПрд╕ 1.8.10) рд╕реЗ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рд╕реНрдирд┐рдк рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛

рд╕рднреА 22 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред :(

рдХреБрдЫ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЛ рднреА рдЕрд╕реНрд╡реАрдХреГрдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП (рдпрджрд┐ рд╣рдо рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХрд░рддреЗ рд╣реИрдВ):

class C {
    static name = 'something';
    static arguments = 'args';
    static caller = 'caller';
}

console.log(C.name); // 'C'
console.log(C.arguments); // null
console.log(C.caller); // null

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпреЗ рд╕рднреА рд╕реНрдЯрд╛рд░рдбрд░реНрдб рдирд╣реАрдВ рд╣реИрдВред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЧреБрдг name , caller рдФрд░ length рджреЗрдп рд╣реИрдВред рд╡реЗ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреБрдг рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрдирдХреЗ рд╕рднреА рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

@tinganho рдиреЗ рд╕рд╣рдорддрд┐ рд╡реНрдпрдХреНрдд рдХреА

рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рд▓реЛрдЧ рд╕рдордп-рд╕рдордп рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐ рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреАрдПрд╕ рдХреЛ рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рдЧрд▓рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ name рдпрд╛ length рдЬреИрд╕реА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдмрд╣реБрдд рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ рдЗрд╕рд▓рд┐рдП рд▓реЛрдЧ рдЙрдиреНрд╣реЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓реЗрдВрдШ, рдирд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред

рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рдХреНрдпрд╛ рдЕрдзрд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП?

рдЕрдм рддрдХ рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ:
рд▓рдВрдмрд╛рдИ, рдирд╛рдо, рддрд░реНрдХ, рдХреЙрд▓рд░

рдЬрдм рдХрд┐рд╕реА рдХреЛ рдирд┐рд╖рд┐рджреНрдз рдирд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рд╕рдВрдХрд▓рдХ рддреНрд░реБрдЯрд┐? рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдпрдорд╛рди рдЪреЗрддрд╛рд╡рдиреА?

рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдВ, рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рддреЛ рдХреБрдЫ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред :+1:

рд╕рдВрдХрд▓рди рдХреНрдпреЛрдВ рдирд╣реАрдВ

class C {
    static name = 'something';
    static arguments = 'args';
    static caller = 'caller';
}

console.log(C.name); // 'C'
console.log(C.arguments); // null
console.log(C.caller); // null

рдЬреИрд╕реЗ рдХреБрдЫ

var C = (function () {
    function C() {
    }

    C.__statics = {
        name: 'something',
        arguments: 'args',
        caller: 'caller'
    };

    return C;
})();
console.log(C.__statics.name); // 'something'
console.log(C.__statics.arguments); // 'args'
console.log(C.__statics.caller); // 'caller'

рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рднреА рдкреНрд░рд╢реНрди рдЖрдпрд╛: http://stackoverflow.com/a/34644236/390330 : рдЧреБрд▓рд╛рдм:

@zerkms рдХреГрдкрдпрд╛ рдПрдХ рд╣реА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдкреЛрд╕реНрдЯ рди рдХрд░реЗрдВ; рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

рдЖрдк рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдХрднреА-рдХрднреА рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдирд╛рдо рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ

interface HasName {
  name: string;
}
class Foo {
  static name = 'fooClass';
}
let bar: HasName = { name: string };
let q = Math.random() > 0.5 ? Foo : bar;
console.log(q.name);

@RyanCavanaugh рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ (рдореИрдВ рдЯреАрдПрд╕ рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди gosh - рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╕рд┐рд╕реНрдЯрдо рдЕрдЬреАрдм рд╣реИ рдЬреИрд╕реЗ рд╣реА рдпрд╣ рдЗрд╕ рдХреЛрдб рдХреЛ рд╡реИрдз рдорд╛рдирддрд╛ рд╣реИ)ред

рдпрджрд┐ рдЬреЛрдЦрд┐рдо рдХреЗ рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдпрджрд┐ рдЬреЛрдЦрд┐рдо рдХреЗ рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдирд╣реАрдВ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ, рдмрд╕ рдЗрд╕реЗ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ: рдЧреБрд▓рд╛рдм:

[...] рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЦрд╛рд░рд┐рдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдХреБрдЫ рдЙрджреНрдпрдореА рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╣рдореЗрдВ рдПрдХ рдкреАрдЖрд░ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдП! :рдЖрдБрдЦ рдорд╛рд░рдирд╛:

Object.defineProperty рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ?

рдЬреИрд╕реЗ

class C {
    static length() { return "twelve"; }
}

рдЬреИрд╕реЗ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпрд╛рд░реЛрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛

var C = (function () {
    function C() {
    }
    Object.defineProperty(C, "length", {
        value: function () { return "twelve"; },
        writable: true
    });
    return C;
}());

@ рдирд┐рдХреЛрд▓реЛ-рд░рд┐рдмрд╛рдЙрдбреЛ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореЗрд░реА рд░рд╛рдп: рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдорддреМрд░ рдкрд░ _fixing рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ_ рдХреЗ рдмрдЬрд╛рдп рд╕реБрдВрджрд░ рддреНрд░реБрдЯрд┐ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЭреБрдХрддрд╛ рд╣реИ: рдЧреБрд▓рд╛рдм:

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдорддреМрд░ рдкрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕реБрд╢реЛрднрд┐рдд рддреНрд░реБрдЯрд┐ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЭреБрдХрддреЗ рд╣реИрдВ

рдЯреАрдПрд╕ рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬреЗрдПрд╕ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдПрд╕ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдпрд╣ рдХрднреА рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧрд╛ред

рдЯреАрдПрд╕ рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬреЗрдПрд╕ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдПрд╕ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдпрд╣ рдХрднреА рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧрд╛ред

рд╣рд╛рдБред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдордЭрдиреЗ рд╕реЗ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред null рдФрд░ undefined рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдВред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЛрдиреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдзреЛрдЦрд╛ рджреЗрддрд╛ рд╣реИ (рдбрд╛рд░реНрдЯ рдХреА рддрд░рд╣ рдЗрд╕реЗ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдореЗрдВ рд╕рдореЗрдХрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп https://www.dartlang.org/docs/synonyms/) рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЧрд▓рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рджреЗрддрд╛ рд╣реИ (рдЗрд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рдореЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп): рдЧреБрд▓рд╛рдм:

рдореЗрд░реА рд░рд╛рдп рдореЗрд░реЗ рдЕрдкрдиреЗ рд╣реИрдВ рдФрд░ рдореЗрд░реЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдФрд░ рдиреЗ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛: рдЧреБрд▓рд╛рдм:

рдЗрд╕ рдмреАрдЪ ES6 / 2015 рджреЗрд╢реА рд╕рдорд░реНрдерди рдХреНрд░реЛрдо рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдЙрддрд░рд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпреЗ рдореБрджреНрджреЗ рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ @ nicolo-ribaudo рдХреЗ рдХрд░реАрдм рдЖрддрд╛ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИ (рджреЗрдЦреЗрдВ # 9778)ред

рджреЗрд╢реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдирд┐рдкреЗрдЯ:

class Foo {
    constructor() {}
}
class Bar {
    static length() {}
    static name() {}
    static caller() {}
}
Foo.name = "FooChanged";
Bar.name = "Baz";

console.log(Foo.name) // Logs "Foo". Foo.name remains unwritable
console.log(Bar.name) // Logs "Baz".  Bar.name became writable

name , length рдФрд░ caller рд░реАрдбреЛрдирд▓реАрдиреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд╕рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣рдо рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЧреБрдг рдПрдХ рдмрд╛рд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ рд╣рдордиреЗ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ ( рдПрдордбреАрдПрди рдкрд░ рдореЗрд░реА Function.name рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЦрддрд░рдирд╛рдХ рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

рддреЛ @nicolo-ribaudo рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП Object.defineProperty рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдореВрд▓ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдХрд░рдг рд╣реЛрдЧрд╛ред рдПрдХ рдмрд╛рдд рдЬрд┐рд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреБрд░рд╛рдиреЗ рд▓реЗрдХрд┐рди ES5 рд╕рдВрдЧрдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдиреЗ рдЧреБрдгреЛрдВ рдХреЛ configurable: false рд╕реЗрдЯ рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ writable: true рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдЙрдирдХреЗ рд▓рд┐рдП рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧреА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Function.name рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рджреЗрдЦреЗрдВ)

рдЪреАрдЬреЛрдВ рдХреЛ рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдореЗрд░реА рд░рд╛рдп рдереА:

  • рд╣рдо рд╕рдВрдХрд▓рди-рд▓рдХреНрд╖реНрдп es3 рд▓рд┐рдП Object.defineProperty() рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред Object.defineProperty рдмрд┐рдирд╛, ES5 рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ ES3 рдХреЛрдб рдЪрд▓рд╛рдиреЗ рд╕реЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреАред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ es3 рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  • рд╕рдВрдХрд▓рди-рд▓рдХреНрд╖реНрдп es5 рд▓рд┐рдП рдЗрд╕реЗ Object.defineProperty() рдФрд░ writable: true рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА/рддреНрд░реБрдЯрд┐ рдЬрд╛рд░реА рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрди рд╕рдВрдкрддреНрддрд┐ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ x of version <= y рдХрд┐, рдпрджрд┐ рдЗрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЛ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╕рдмрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд┐рдХрд▓реНрдк рджреВрд╕рд░рд╛ рдирд╛рдо рдЪреБрдирдирд╛ рдерд╛ред
  • рдпрджрд┐ рдЖрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред

рд╕рдВрдХрд▓рди рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджреЗрд╢ рдЖрдЬ рдХреА рд╕реНрдерд┐рддрд┐ (рдЯреАрдПрд╕ 1.8.10) рд╕реЗ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рд╕реНрдирд┐рдк рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛

@RyanCavanaugh : рдХреНрдпрд╛ рдЖрдк рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ рдЯреАрдПрд╕ 2.0.1 рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдорд╛рдзрд╛рди рд╕реАрдзреЗ рдЖрдЧреЗ рд▓рдЧрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдк рдХрд┐рд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдорд┐рдЯрд░ рдЖрдЙрдЯрдкреБрдЯ рдЪреБрдирддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдмрджрд▓рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ (рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ)ред TS 2.0 рдХрд╛ рд░рд┐рд▓реАрдЬрд╝ рддреЛ рдлрд┐рдХреНрд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдкреАрдЖрд░ рдкрд░ рдЯреИрдЧреНрд╕ рд╕реЗ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреАрдо, рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рд╕реАрдорд┐рдд рд╕рдВрд╕рд╛рдзрди рд╣реИрдВ, рдЗрд╕ рд╕рдореБрджрд╛рдп рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рд╡реНрдпрд╛рдкрдХ рд╕рдореБрджрд╛рдп рдореЗрдВ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрд░ рдЯреАрдо рдХреЛ рдпрд╣ рдорд╣рд╕реВрд╕ рди рд╣реЛ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдмреИрдХрд▓реЙрдЧ рдореЗрдВ рдЗрд╕реЗ рд░рд┐рд▓реАрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрдЧрд╣ рд╣реИ (рдЬреЛ рдХрд┐ рдПрдХ рд▓рдВрдмрд╛ рд▓рдВрдмрд╛ рд╕рдордп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

рдкреАрдЖрд░ рд▓реЗрдмрд▓ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП @kitsonk рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЬреЛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛ рдЙрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИред рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдЧреБрдг рдЬрд┐рдиреНрд╣реЗрдВ _name_ рдпрд╛ _length_ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдРрд╕рд╛ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЯреАрдПрд╕ рдЙрд╕ рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдФрд░ "рдПрдЬ рдХреЗрд╕" рдХреЛ рднреА рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ред

рдореИрдВ рднрд╛рд╖рд╛ рдХреЗ рдореВрд▓ рдореЗрдВ рд╕реНрдерд┐рд░ рдЧреБрдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рднрд▓реЗ рд╣реА рдЕрднреА рддрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд╣реАрдВ рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рдорд╛рдзрд╛рди рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рд╣реИрдВред

рдлрд┐рд░ рднреА, рдореИрдВ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдПрдХ рдкреАрдЖрд░ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рдЕрднреА рддрдХ рдЯреАрдПрд╕ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░ рдирд╣реАрдВ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдЯреАрдПрд╕ 2.0 рдкрд╣рд▓реЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jbondc picture jbondc  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Roam-Cooper picture Roam-Cooper  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

blendsdk picture blendsdk  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

CyrusNajmabadi picture CyrusNajmabadi  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kyasbal-1994 picture kyasbal-1994  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ