ECMAScript рдХреЗ 5 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХрдИ рдирдП рддрд░реАрдХреЗ рдкреНрд░рдХрдЯ рд╣реБрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдФрд░ рд░реВрд╕реА рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдЕрдХреНрд╕рд░ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ) рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рд╣реИ рдХрд┐ рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ
рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рдПрдЧреА рдФрд░
ECMAScript рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ 3 рдФрд░ 5 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕рд╛рдордЧреНрд░реА
1. Object.create (рдкреНрд░реЛрдЯреЛ [, рдЧреБрдг])
2. Object.defineProperty (рдСрдмреНрдЬреЗрдХреНрдЯ, рдкреНрд░реЙрдкрд░реНрдЯреА, рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░)
3. Object.defineProperties (рдСрдмреНрдЬреЗрдХреНрдЯ, рдЧреБрдг)
4. Object.getOwnPropertyDescriptor (рдСрдмреНрдЬреЗрдХреНрдЯ, рдЧреБрдг)
5. Object.keys (рдСрдмреНрдЬреЗрдХреНрдЯ)
6. Object.getOwnPropertyNames (рдСрдмреНрдЬреЗрдХреНрдЯ)
7. рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░
8. рдПрдХреНрд╕реЗрд╕рд░ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░
9. Object.getPrototypOf (рдСрдмреНрдЬреЗрдХреНрдЯ)
10. Object.preventExtensions (рдСрдмреНрдЬреЗрдХреНрдЯ)
11. Object.isExtensible (рдСрдмреНрдЬреЗрдХреНрдЯ)
12. Object.seal (рдСрдмреНрдЬреЗрдХреНрдЯ)
13. Object.isSealed (рдСрдмреНрдЬреЗрдХреНрдЯ)
14. Object.freeze (рдСрдмреНрдЬреЗрдХреНрдЯ)
15. Object.deepFreeze (рдСрдмреНрдЬреЗрдХреНрдЯ) (рдЧреИрд░-рдорд╛рдирдХ)
16. Object.prototype.hasOwnProperty (рд╕рдВрдкрддреНрддрд┐)
17. Object.prototype.isPrototypOf (рдСрдмреНрдЬреЗрдХреНрдЯ)
18. Object.prototype.propertyIsEnumerable (рдСрдмреНрдЬреЗрдХреНрдЯ)
19. рдирд┐рд╖реНрдХрд░реНрд╖
Object.create (рдкреНрд░реЛрдЯреЛ [, рдЧреБрдг])
Object.create () рджрд┐рдП рдЧрдП рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рддрд╛ рд╣реИ:
object = Object.create property: 1 object.property
рдПрдХ рд╡рд┐рдзрд┐ рджреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗ рд╕рдХрддреА рд╣реИред
рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ
рд╢реВрдиреНрдп рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ; рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
object = Object.create {}, property: value: 1 object.property
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдПрдХ рдЦрд╛рд▓реА рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдЧрд╛ред
рд░рд╣рд╕реНрдпрдордп рдореВрд▓реНрдп рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рди рдХрд░реЗрдВ, рдереЛрдбрд╝рд╛ рдмрд╛рдж рдореЗрдВ рд╣рдо рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рддреЛ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИрдВ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рдкреНрд░рд╢реНрди рдХреЗ рдЙрддреНрддрд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
object = Object.create property: 1 object.property = 2 object.property
рддреБрдо рдХреНрдпрд╛ рдкреВрдЫрддреЗ рд╣реЛ?
рдмрд╕, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рджреВрд╕рд░рд╛ рд░реВрдк рдпрд╣ рд╣реИ рдХрд┐ рдЧреБрдг рдХреЗрд╡рд▓-рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рд╣рдЯрд╛рдП рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗ, рдФрд░ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ!
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:
object = Object.create {} property: value: 1 object.property = 2 object.property
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдордиреЗ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирдпрд╛ рдорд╛рди рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕реЗ рдПрдиреНрдпреВрдорд░реЗрдЯ рдХрд░реЗрдВ, рдпрд╛ рд╣рдЯрд╛рдПрдВред
рдФрд░ рдЕрдм рдореИрдВ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐
Object.create () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
A = a: 1 b: 2 B = Object.create A, c: value: 3 enumerable: on for own key, value of B console.log " # {key}: # {value}"
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рдСрдмреНрдЬреЗрдХреНрдЯ
рдП рд╕реЗ рдЧреБрдгреЛрдВ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░
рдЧрдгрдирд╛ рдХрд░рдиреЗ
рдпреЛрдЧреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИ рддрд╛рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдмреА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрдкрддреНрддрд┐
рдХреЛ рд▓реВрдк рдХреЗ
рд▓рд┐рдП рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХрдерди рдХреЗ
рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдСрдкрд░реЗрдЯрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдореЗрдВ
hasOwnProperty рд╡рд┐рдзрд┐ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ
рдмрдЪрддреА рд╣реИ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЪреЗрди рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХреЛ
рд░реЛрдХрддреА рд╣реИред
рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ
рд▓реЗрдЦ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрджрд░ рд╕реЗ
рдирд┐рд░реНрдорд╛рдг () рд╡рд┐рдзрд┐ рдХреИрд╕реЗ
рдХрд╛рдо рдХрд░рддреА рд╣реИ, рддреЛ рдореИрдВ рдЬреЛ рднреА рдкрдврд╝рддрд╛ рд╣реВрдВ рдЙрд╕реЗ рд╕рдореЗрдХрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд╛рддрд╛ рд╣реВрдВ:
Object.create = (object, properties) ->
Object.defineProperty (рдСрдмреНрдЬреЗрдХреНрдЯ, рдкреНрд░реЙрдкрд░реНрдЯреА, рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░)
Object.defineProperty () рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдирдИ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ / рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рд╕рдВрдкрддреНрддрд┐ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдирддреАрдЬрддрди, рдПрдХ рдирдИ рд╡рд╕реНрддреБ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИред
рдСрдмреНрдЬреЗрдХреНрдЯ - рд╡рд╣ рд╡рд╕реНрддреБ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдЧреБрдгреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
рд╕рдВрдкрддреНрддрд┐ - рдкрд░рд┐рднрд╛рд╖рд┐рдд рдпрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо
рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ - рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
object = {} Object.defineProperty object, 'property' value: 1
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
рдореВрд▓реНрдп рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди рд╣реИрдВред рдЕрдм рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХрд╡рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред
рдирдП рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде, рдирдП рд╢рдмреНрдж
ECMAScript 5 рдореЗрдВ рднреА рджрд┐рдЦрд╛рдИ рджрд┐рдП рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╡рд░рдгрдХ ред
рдПрдХ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рди рдФрд░ рдПрдХреНрд╕реЗрд╕ рд╕реНрддрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЙрдирдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рдЖрдкрдХреЛ рд╕рдВрдкрддреНрддрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
ECMAScript 5 рдХреЗ рдЖрдЧрдорди рд╕реЗ рдкрд╣рд▓реЗ, рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╛рдореВрд▓реА рдЙрдкрдХрд░рдг рдЙрдкрд▓рдмреНрдз рдереЗ:
Object.prototype.propertyIsEnumerable () рдФрд░
Object.prototype.hasOwnProperty () ред
рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рддреАрди рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ (
рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ ),
рдПрдХреНрд╕реЗрд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ (
рдПрдХреНрд╕реЗрд╕рд░ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ ) рдФрд░
рд╕рд╛рдорд╛рдиреНрдп рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ (
рдЬреЗрдиреЗрд░рд┐рдХ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ )ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдЕрдВрддрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХрд╛ рд╡рд░реНрдгрди рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреНрд░рдХреГрддрд┐ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд╣реИред
рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░
рдпрд╣ рдЧреБрдг рддрдм рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡рд┐рд╡рд░рдгрдХ рдЦрд╛рд▓реА рд╣реЛ рдпрд╛ рд╡рд┐рд╡рд░рдгрдХ рдХреЗ рдкрд╛рд╕ рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛ:
рдореВрд▓реНрдп рдпрд╛
рд▓реЗрдЦрди ред
рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдзрд┐
[[IsDataDescriptor]] рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ:
IsDataDescriptor (Descriptor): if Descriptor is undefined return off if !Descriptor.[[Value]] and !Descriptor.[[Writable]] return off return on
рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдФрд░
рдЧрдгрдирд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп ред
{ configurable: false, enumerable: false }
рдЖрдЗрдП рдЕрдм рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
рдореВрд▓реНрдп - рд╡рд╕реНрддреБ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп - рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп - рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
enumerable - рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдЧрдгрдирд╛ рдХреА рдкрд╣реБрдБрдЪ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рднреАрддрд░, рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд╛рдо рд╣реИрдВ:
[[рдореВрд▓реНрдп]] ,
[[рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп]] ,
[[рдЕрд╕рдВрдЦреНрдп]] ,
[[рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп]] ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рднреА рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ
рдЭреВрдареА рд╣реИрдВ ,
рдорд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдЗрд╕рдХрд╛ рдорд╛рди
рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ ред
рдиреЛрдЯ: рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ,
ECMAScript 3 рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╡рд░рдгрдХ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдВрддрд░рд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ
DontEnum ,
ReadOnly рдФрд░
DontDelete рдирд╣реАрдВ рд╣реИрдВ ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд╕реНрд╡рдпрдВ рд╡рд╕реНрддреБ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
Object.defineProperty {}, 'property' value: 1 writable: on enumerable: on configurable: on
рдЕрдм рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдореЗрдВ
рд╡рд╕реНрддреБ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
Object::method = -> @
рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ
рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реА рдФрд░ рдЗрд╕реЗ рдЖрдЧреЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдиреБрдХрд╕рд╛рди рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдХреЗ рдорд╛рдирдХ рдореЗрдВ рд╕рдорд╛рди рдирд╛рдо рд╡рд╛рд▓рд╛ рдПрдХ рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ рдЗрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдЧреАред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рд╡рд┐рдзрд┐ рдХреЛ рдХреБрдЫ рдЬрдЯрд┐рд▓ рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╢рд╛рдВрддрд┐ рд╕реЗ рд╕реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
Object::my_super_method = -> @
рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдзрд┐ рдХрднреА рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧреАред
рджреВрд╕рд░реА рдмрд╛рдд, рд╣рдо рдЬреЛ
рд╡рд╕реНрддреБ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рд╡рд╣ рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдЧрд┐рд░рддрд╛ рд╣реИ:
Object::method = -> 1 list = [] do list.method
рддреАрд╕рд░рд╛, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рдкрд╛рд╕
enumerable рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛
рд╕рд╣реА рдореВрд▓реНрдп рд╣реЛрдЧрд╛:
Object::method = -> 1 object = {}; i for i of object
рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ
рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рд╡рд┐рдзрд┐
рд╡рд┐рдзрд┐ рдХреА рдЧрдгрдирд╛ рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ:
i for own i of object
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ
рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ рднреА рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
Object.defineProperty Object::, 'method' value: -> 1 enumerable: false i for i of object
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ,
рд╡рд┐рдзрд┐ рдХрдерди рдХреЗ
рд▓рд┐рдП рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ
рдереА ред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣рдореЗрд╢рд╛ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдРрд╕реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрднреА-рдХрднреА рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдкрдиреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рдЙрдЪрд┐рдд рдЙрдкрд╛рдп рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рд░реЗрдХ рдкрд░ рдХрджрдо рди рд░рдЦреЗрдВ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЕрдиреНрдп рд▓реЛрдЧ рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рдЧреМрдг рд╡рд┐рд╡рд░рдгрдХ
рдПрдХ рдПрдХреНрд╕реЗрд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ
рдЧреЗрдЯ рдпрд╛
рд╕реЗрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕рд╛рде рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐,
рдореВрд▓реНрдп рдФрд░
рд▓реЗрдЦрди рдпреЛрдЧреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА
рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ :
IsDataDescriptor (Descriptor): if Descriptor is undefined return off if !Descriptor.[[Get]] and !Descriptor.[[Set]] return off return on
рддрдм рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдзрд┐
[[DefineOwnProperty]] рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИрдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рднреАрддрд░, рд╡рд┐рд╡рд░рдгрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд╛рдо рд╣реИрдВ:
[[рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ]] рдФрд░
[[рд╕реЗрдЯ]] ред
рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдореЗрдВ
рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рдФрд░
рдЧрдгрдирд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
property = 0 object = Object.defineProperty {}, 'property' get: -> property set: (value) -> property = value configurable: on enumerable: on object.property = 1
рдореИрдВ рдпрд╣ рднреА рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдбреЗрдЯрд╛ рдФрд░ рдПрдХреНрд╕реЗрд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд╛ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдЕрдиреБрдордд рдирд╣реАрдВ рд╣реИ:
Object.defineProperty {}, 'property' get: -> 1 value: 1
Object.create () рдХреЗ рд╕рд╛рде , рд╡рд┐рд░рд╛рд╕рдд рдПрдХ рд╣реА рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреА рд╣реИ:
A = a: 1 b: 2 B = Object.defineProperty A, 'c' value: 3 enumerable: on for own key, value of B console.log " # {key}: # {value}"
Object.defineProperties (рдСрдмреНрдЬреЗрдХреНрдЯ, рдЧреБрдг)
рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдирдП рдЧреБрдгреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ / рдпрд╛ рдореМрдЬреВрджрд╛ рдЧреБрдгреЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдПрдХ рдирдИ рд╡рд╕реНрддреБ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ,
Object.defineProperties () рдХреЗрд╡рд▓ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде
Object.defineProperty () рдХреЗ рд╕рдорд╛рди рд╣реИред
object = Object.defineProperties {}, a: value: 1 enumerable: on b: value: 2 enumerable: on for own key, value of object console.log " # {key}: # {value}"
рдпрджрд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧреБрдгреЛрдВ рдХреЗ рдирд╛рдо рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджрд┐рдП рдЧрдП рд▓реЛрдЧреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
A = a: 1 b: 2 object = Object.defineProperties {} a: value: 3 enumerable: on b: value: 4 enumerable: on for own key, value of object console.log " # {key}: # {value}"
рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдПрдХреНрд╕реЗрд╕рд░ рдХреЛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓рддрд╛:
object = Object.defineProperty {}, 'property' get: -> 0 Object.defineProperty object, 'property' get: -> 1 object.property
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ
рдпреЛрдЧреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
object = Object.defineProperty {}, 'property' get: -> 0 configurable: on Object.defineProperty object, 'property' get: -> 1 object.property
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ,
IE рд╕рдВрд╕реНрдХрд░рдг 9 рдХреЗ рдиреАрдЪреЗ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 8 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдХ
Object.defineProperty () рд╡рд┐рдзрд┐ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░
Object.defineProperties () рд▓рд╛рдЧреВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
Object.defineProperties = (object, properties) -> type = (object) -> Object::toString.call object is '[object Object]' if !type object and !type properties throw new TypeError 'Object.defineProperties(Object object, properties Object)' if !Object.defineProperty return object; for own key, value of properties Object.defineProperty object, key, value object
Object.getOwnPropertyDescriptor (рдСрдмреНрдЬреЗрдХреНрдЯ, рдЧреБрдг)
рдпрд╣ рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
object = {} Object.defineProperty object, 'property' value: 1 writable: off enumerable: off configurable: on Object.getOwnPropertyDescriptor object, 'property'
рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╡рд░рдгрдХ рдЧреБрдг рдЖрдВрддрд░рд┐рдХ
ECMAScript рдЧреБрдг рд╣реИрдВ,
Object.getOwnPropertyDescriptor () рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдРрд╕реА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐
Object.getOwnPropertyDescriptor () рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
Object.getOwnPropertyDescriptor {}, 'valueOf'
рдХреНрдпреЛрдВрдХрд┐
valueOf рд╕рдВрдкрддреНрддрд┐ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИ рдФрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╣реИ:
{}.hasOwnProperty 'valueOf'
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдиреЛрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд,
hasOwnProperty () рд╡рд┐рдзрд┐, рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдЧреБрдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИред
рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реАрдзреЗ
valueOf рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
{}.constructor::valueOf
рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:
object = {} object.constructor::valueOf = 1 object.valueOf
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмреАрдЪ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд▓реЗрдЦрди рдХреЗ рдпреЗ рд░реВрдк рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИ:
object = {} object.valueOf = 1 object.constructor::valueOf = 2 object.toString
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ (
рд╕реНрд╡рдпрдВ рдХреА рд╕рдВрдкрддреНрддрд┐ ) рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдкрд░ рд╕реЗрдЯ рд╣реИ, рддреЛ рдЙрд╕рдХрд╛ рдореВрд▓реНрдп рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдкрддреНрддрд┐ рдХреЛ "рдУрд╡рд░рд▓реИрдк" рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рдЧрд╛рдпрдм рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдмрд╕ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ рд╕реАрдзреЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрддрд╛ рд╣реИ:
object = {} object.toString = 1 object.constructor::valueOf = 2 object.toString
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрдкрддреНрддрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЦреЛрдЬ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЬрд╛рд░реА рд╣реИ:
object = {} object.constructor::constructor::constructor::property = 1 object.property
рд╣реЛрдорд╡рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
fn = (x) -> x * x fn 2
Object.keys (рдСрдмреНрдЬреЗрдХреНрдЯ)
рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдПрдиреНрдпреВрдорд░реЗрдЯреЗрдб рд╕реНрд╡рдпрдВ рдХреЗ рдЧреБрдгреЛрдВ рд╡рд╛рд▓реЗ рдирд╛рдо рд╣реЛрддреЗ рд╣реИрдВред
рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
Object.keys a: 1 b: 2 .length
рдЕрдХреНрд╕рд░,
Object.keys рдХрд╛ рдЙрдкрдпреЛрдЧ
рдПрд░реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
object = a: 1 b: 2 Object.keys(object).filter (i) -> i if object[i] > 1
Object.keys () рд╡рд┐рдзрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:
Object.keys = (object) -> i for own i of object
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рд╣рдореЗрд╢рд╛ рдЗрдирдкреБрдЯ рддрд░реНрдХ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рдорд╛рдореВрд▓реА рд╕реБрдзрд╛рд░ рдХреЗ рдмрд╛рдж,
Object.keys () рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
Object.keys = (object) -> if Object::toString.call(object) is not '[object Object]' throw new TypeError "Object.keys: # {object.toString()} is not an Object" i for own i of object
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░
Object.keys () рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
Object.keys = (object) ->
Object.getOwnPropertyNames (рдСрдмреНрдЬреЗрдХреНрдЯ)
рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдкрдиреЗ рдЧреБрдгреЛрдВ рдХреЗ рдирд╛рдо рд╣реЛрддреЗ рд╣реИрдВред
Object.keys (рдСрдмреНрдЬреЗрдХреНрдЯ) рдХреЗ рд╡рд┐рдкрд░реАрдд
, рдпрд╣ рд╡рд┐рдзрд┐ рдзреНрдпрд╛рди рджреЗрдиреЗ
рдпреЛрдЧреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддреА рд╣реИ:
object = a: 1 b: 2 Object.defineProperty object, '' value: 3, enumerable: off, Object.keys(object).length
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░
Object.getOwnPropertyNames () рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
Object.getOwnPropertyNames = (object) ->
Object.getPrototypOf (рдСрдмреНрдЬреЗрдХреНрдЯ)
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА
[[рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк]] рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИред
object = {} Object.getPrototypeOf(object).property = 1 object.property
рд╡рд┐рдзрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
Object.getPrototypeOf = (object) -> if Object::toString.call(object) is not '[object Object]' throw new TypeError "Object.getPrototypeOf: # {object.toString()} is not an Object" object.__proto__ or object.constructor::
Object.preventExtensions (рдСрдмреНрдЬреЗрдХреНрдЯ)
рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рддрд╛ рд╣реИред
object = a: 1 Object.preventExtensions object object.b = 1 'b' of object
рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдмрдВрдж рд╡рд╕реНрддреБ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕:
Object.defineProperty рдФрд░ Object.defineProperties рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрдВрдЧреЗ!
object = {} Object.preventExtensions object Object.defineProperty object, 'property' value: 1
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
TypeError рдХреЛ рд╣рдореЗрд╢рд╛ рд╕рдЦреНрдд рдореЛрдб рдореЗрдВ рдлреЗрдВрдХрд╛ рдЬрд╛рддрд╛ рд╣реИ:
do -> 'use strict' object = {} Object.preventExtensions object object.property = 1
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк
рдЯрд╛рдЗрдкрд░реНрд░рд░ рдХреЛ рдирд╣реАрдВ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛!
Object.isExtensible (рдСрдмреНрдЬреЗрдХреНрдЯ)
рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рдмреВрд▓рд┐рдпрди рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред
object = {} Object.preventExtensions object Object.isExtensible object
Object.seal (рдСрдмреНрдЬреЗрдХреНрдЯ)
рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд╕реАрд▓ рдХрд░рддрд╛ рд╣реИред
Object.seal = Object.preventExtensions + {[[Configurable]]: off}
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
object = property: 1 Object.seal object delete object.property
Object.seal () рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ
рдпреЛрдЧреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП
рдЧрд▓рдд рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ:
Object.getOwnPropertyDescriptor(Object.seal property: 1, 'property').configurable
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╡рд╕реНрддреБ рд╕реНрд╡рдпрдВ рд╕реАрд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рдЧреБрдг рд╣реИрдВ:
object = {} Object.defineProperty, 'property' value: 1 Object.seal object delete object.property
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐рд╕реА
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐
рдбрд┐рд▓реАрдЯ [[рдбрд┐рд▓реАрдЯ]] рдСрдкрд░реЗрдЯрд░ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреЗрд╡рд▓ рдЧреБрдг рд╣рдЯрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХреЗ рдЪрд░рдг рдореЗрдВ, рд╕рднреА рдЪрд░ рдкреВрд░реНрд╡рд╡рд░реНрддреА рдХреАрд╡рд░реНрдб рд╕реЗ рд╣реЛрддреЗ рд╣реИрдВред
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡рдпрдВ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╡реИрд╢реНрд╡рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
global.object = {}
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╕реНрддреБрдУрдВ рдХреА рдРрд╕реА рдкрд░рд┐рднрд╛рд╖рд╛ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐
рд╡рд╕реНрддреБ рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдореЗрдВ рдЖрддреА рд╣реИ:
do -> global.object = {} object
рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕реЗ рдПрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ:
object = {} object = undefined object
рдпрджрд┐ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрд╕ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ
рдЕрд╢рдХреНрдд рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╕рдВрдХреЗрдд рджреЗрдЧрд╛ рдХрд┐ рдЪрд░ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рдВрджрд░реНрдн рдерд╛ред
1. CoffeeScript рдореЗрдВ рдХреЛрдИ рд╢реВрдиреНрдп рдСрдкрд░реЗрдЯрд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐ рд╢реВрдиреНрдп 0 рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ ред
2. рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рдирд┐рдпрдо рдирд╣реАрдВ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рджрд┐рдирд╛рдВрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЕрдм рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА, рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдХреЙрд▓ рд╡рд┐рдзрд┐ рдХреЛ рд╣рдЯрд╛ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ:
delete Date.now
рдЙрд╕реА рд╕рдордп, рдЗрд╕реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ ([рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп]]: рд╕рдЪ) :
delete Object
2. рдореИрдВрдиреЗ рдбрд┐рд▓реАрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдирд╣реАрдВ рдорд╛рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╡рд┐рд╖рдп рд╣реИред рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдЗрд╕ рдкреНрд░рд╢реНрди рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдХрдВрдЧреИрдХреНрд╕ рдХреЗ рд▓реЗрдЦ рдХреЛ рдПрдХ рдЕрдВрдбрд░рд╕реНрдЯреИрдВрдбрд┐рдВрдЧ рдбрд┐рд▓реАрдЯ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ
рдЗрд╕ рддрдереНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐
Object.seal () рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛рддрд╛ рд╣реИ, рдпрд╣ рдирдП рд▓реЛрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЛ рднреА рд░реЛрдХрддрд╛ рд╣реИ:
object = {} Object.seal object object.property = 1 object.property
рдиреЛрдЯ: рд╕рд░реНрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ
TypeError рдлреЗрдВрдХ рджреЗрдЧрд╛!
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕реАрд▓рд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рд╡реИрд▓реНрдпреВ рдХреЗ рд╕рдВрд╢реЛрдзрди рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИ:
object = property: 1 Object.seal object object.property = 2 object.property
рдЬреИрд╕рд╛ рдХрд┐
Object.preventExtensions () рдХреЗ рд╕рд╛рде , рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд╕рдЦреНрдд рдореЛрдб рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдпрд╛
Object.defineProperty / Object.defineProperties рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ
рдПрдХ TypeError рдЕрдкрд╡рд╛рдж рд╣реЛрдЧрд╛!
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░
Object.seal () рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
Object.seal = (object) ->
Object.isSealed (рдСрдмреНрдЬреЗрдХреНрдЯ)
рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд╕реНрддреБ рд╕реАрд▓ рд╣реИред рдПрдХ рдмреВрд▓рд┐рдпрди рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред
object = {} Object.seal object Object.isSealed object
рдпрджрд┐ рдХрд┐рд╕реА рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рдХреЛ рдЧреИрд░-рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рд╕реАрд▓ рд╣реЛ рдЬрд╛рдПрдЧреА:
object = {} Object.preventExtensions object Object.isSealed object
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдк рдЕрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реАрд▓ рд╣реЛрдирд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛:
object = property: 1 Object.preventExtensions object Object.isSealed object
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░
Object.isSealed () рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
Object.isSealed = (object) ->
рдСрдмреНрдЬреЗрдХреНрдЯ.рдлрд╝реНрд░реАрдЬрд╝ (рдСрдмреНрдЬреЗрдХреНрдЯ)
рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рдореБрдХреНрдд рдХрд░рддрд╛ рд╣реИред
Object.freeze = Object.preventExtensions + Object.seal + {[[Writable]]: off}
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ,
Object.freeze () рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдирдП рдЧреБрдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ, рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред
object = a: 1 object.a = 0
рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдВрдЪ рдХреА рд╣реИ
Object.preventExtensions () рдФрд░
Object.seal () рджреЛрд╣рд░рд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ "рдлреНрд░реАрдЬ" рдХреА рдЧрд╣рд░рд╛рдИ:
object = property: internal: 1 Object.freeze object object.property = 0
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХреЗ рдХреЗрд╡рд▓ рдмрдЪреНрдЪреЗ рдХреЗ рдЧреБрдг рдЕрд╡рд░реБрджреНрдз рд╣реИрдВ!
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ,
ECMASctipt 5 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ
рдХреА рдХреЛрдИ
рдмрд╛рдд рдирд╣реАрдВ
рд╣реИ рдХрд┐ рдХреЛрдИ рдЧрд╣рд░реА рдлреНрд░реАрдЬ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЗрдП
Object.deepFreeze () рдХреЛ рд╕реНрд╡рдпрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
Object.deepFreeze = (object) -> isObject = (value) -> Object::toString.call(value) is '[object Object]' if !isObject object throw new TypeError "Object.deepFreeze: # {object} is not callable!" for own key, value of object if isObject(value) and !Object.isFrozen value Object.deepFreeze(value) Object.freeze object object = property: internal: 1 Object.deepFreeze object Object.getOwnPropertyDescriptor(object.property, 'internal').writable
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░
Object.freeze () рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
Object.freeze = (object) ->
Object.isFrozen (рдСрдмреНрдЬреЗрдХреНрдЯ)
рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╕реНрддреБ рдЬрдореА рд╣реИ рдпрд╛ рдирд╣реАрдВред object = property: 1 Object.isFrozen object
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ Object.isFrozen () рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди : Object.isFrozen = (object) ->
Object.prototype.hasOwnProperty (рд╕рдВрдкрддреНрддрд┐)
рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рд╕рдВрдкрддреНрддрд┐ рдЙрд╕рдХреА рдЕрдкрдиреА рд╣реИ рдпрд╛ рдирд╣реАрдВред рдПрдХ рдмреВрд▓рд┐рдпрди рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред object = property: 1 object.hasOwnProperty 'property'
рдЖрдк рди рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЧреБрдг, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИрдВ, рддреЛ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХреА , рдЬреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ: object = property: 1 'property' of object
.AsOwnProperty () рд╡рд┐рдзрд┐ рд▓реВрдк рдХреЗ рд▓рд┐рдП рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ : Object::inherited = 0 object = property: 1 (i for i of object)
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, hasOwnProperty () рд╡рд┐рдзрд┐ рдЧрд╛рд░рдВрдЯреА рджреЗ рд╕рдХрддреА рд╣реИ рдХрд┐ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИредрд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ hasOwnProperty рдирд╛рдо рдХреА рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдиреБрдорд░реЗрдЯреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддреА рд╣реИ : Object::inherited = -> object = own: 1 hasOwnProperty: -> @ for i of object i if object.hasOwnProperty i
рдмреЗрд╢рдХ, рдпрд╣ рд╡рд╣ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдо рдкрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред рддреЛ рдХреНрдпрд╛ рдХрд░реЗрдВ?
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓рддрд╛ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдЖрджреЗрд╢ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ Object.prototype рдкрд░ hasOwnProperty рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ : Object::inherited = -> object = own: 1 hasOwnProperty: -> @ for i of object i if Object::hasOwnProperty.call object, i
.HasOwnProperty рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдпрд╣ рд╡рд┐рдзрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХреА рдЬрд╛рддреА рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдирд╛рдо рд╕рдВрдШрд░реНрд╖ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗ рд╕реАрдзреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдХрд╛рд░рдг рддреЗрдЬреА рд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИредрдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрджрд┐ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрдкрдиреЗ рдмреАрдЪ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЦреЛрдЬ рдЖрдЧреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рд░рд╣рддреА рд╣реИредрдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рднреА рдЕрдиреБрдорд╛рдирд┐рдд рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдХрдм рд╕реЗ
hasOwnProperty () рд╡рд┐рдзрд┐ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИ, рдЗрд╕реЗ рдирд┐рдореНрди рдЧреБрдгреЛрдВ рдореЗрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдЦреЛрдЬрд╛ рдЬрд╛рдПрдЧрд╛: Object.getOwnPropertyNames Object.prototype [ 'toString', 'toLocaleString', 'hasOwnProperty', 'valueOf', 'constructor', 'propertyIsEnumerable', 'isPrototypeOf', ]
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЗрд╕ рд╕реВрдЪреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реА 8 , рдкреНрд░реЗрд╕реНрдЯреЛ , рдЧреЗрдХреЛ рдЗрдВрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП , рдпреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреБрдг рд╣реЛрдВрдЧреЗ: '__lookupGetter__', '__defineGetter__', '__defineSetter__', '__lookupSetter__'
рдореЗрдВ рдЫрд┐рдкрдХрд▓реА рдЕрднреА рднреА рдЖрдЧреЗ рдЧреБрдг рд╣реЛрдЧрд╛ рдШрдбрд╝реА рдФрд░ unwatch редрдЗрд╕рд▓рд┐рдП, рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрдкрддреНрддрд┐ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдмрд░реНрдмрд╛рдж рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рд╕реНрдерд╛рди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рд▓реВрдк рдмреЙрдбреА рдХреЗ рдмрд╛рд╣рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЪрд░ рдФрд░ рд╕рдВрджрд░реНрднреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдмрдирд╛рдПрдВ: object = {} own = Object::hasOwnProperty for i of object i if own.call object, i
рдЪреВрдВрдХрд┐ рд╡рд┐рдзрд┐ hasOwnProperty () рдЕрдХреНрд╕рд░ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреЗ рд▓рд┐рдП-рдХреА , рдореЗрдВ CoffeeScript рдПрдХ рд╡рд┐рд╢реЗрд╖ рдСрдкрд░реЗрдЯрд░ рд╣реИ рдЦреБрдж : alert i for own i of object
рдкреНрд░рд╕рд╛рд░рдг рдкрд░рд┐рдгрд╛рдо: var i, __hasProp = {}.hasOwnProperty; for (i in object) { if (!__hasProp.call(object, i)) continue; alert(i); }
рдСрдкрд░реЗрдЯрд░ рдХреА рдХреА рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдЦреБрдж рдФрд░ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП-рдХреА : рдЖрд▓реЗрдЦ рджреЗрдЦреЗрдВ CoffeeScript: рдПрдХ рдЧрд╛рдЗрдб рдЪрдХреНрд░ рд╡рд┐рд╕реНрддреГрдд ред
рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Object.keys () рдФрд░ Object.getOwnPropertyNames () рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ , рдЬреЛ рдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдлреЙрд░- рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ редObject.prototype.isPrototypOf (рдСрдмреНрдЬреЗрдХреНрдЯ)
рдпрджрд┐ рджреА рдЧрдИ рд╡рд╕реНрддреБ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╣реИ рддреЛ рдЬрд╛рдВрдЪреЗрдВред рдПрдХ рдмреВрд▓рд┐рдпрди рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред object = {} Object::isPrototypeOf object
Object.prototype.propertyIsEnumerable (рдСрдмреНрдЬреЗрдХреНрдЯ)
рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдкрддреНрддрд┐ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдПрдХ рдмреВрд▓рд┐рдпрди рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред object = property: 1 object.propertyIsEnumerable 'property'
рдирд┐рд╖реНрдХрд░реНрд╖:
рд╣рдордиреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдФрд░ рдЙрдирдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд╛рдВрдЪ рдХреА ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП ECMAScript 5 рд╕реЗ рдХрдИ рддрд░реАрдХреЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЬреЛ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХрд╛рдлреА рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИред рдПрдХ рдЖрдВрд╢рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрд░реЗ githab рдИ рдкрд░ рдпрд╛ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИрдпрджрд┐ рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВрдЧреЗ , рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рд╕рдВрдЧрддрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рднреА рдкрд░рд┐рдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред