рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЧреИрд░-рдЧреБрдкреНрдд рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдЬреЛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдЧреЗрдЯрд░реНрд╕ рдФрд░ рдмрд╕рдиреЗ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореВрдЯреВрд▓ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдереЛрдбрд╝рд╛ рдЦреЛрджрддрд╛ рд╣реИред рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдЬреЙрди рд░реЗрдЬрд┐рдЧ рдХреЗ рдПрдХ рд▓реЗрдЦ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдореЗрд░рд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рдФрд░ рдкреНрд░рдпреЛрдЧред
function Foo(bar){ this._bar = bar; } Foo.prototype = { get bar () { return this._bar; }, set bar (bar) { this._bar = bar; } };
рдорд╛рдирдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ
рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░реНрд╕ рдХреНрдпрд╛ рд╣реИрдВ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реЛрдЧрд╛ред рдЖрдорддреМрд░ рдкрд░ рдФрд░ рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
function Foo(bar) { this._bar = bar; }; Foo.prototype = { setBar : function (bar) { this._bar = bar; }, getBar : function () { return this._bar; } }; var foo = new Foo; foo.setBar(123); alert(foo.getBar());
рдЖрдк рдЖрдЧреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рд╡рд┐рдХрд▓реНрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
function Foo(bar) { var _bar = bar; this.bar = function (bar) { if (arguments.length) _bar = bar; else return _bar; } }; var foo = new Foo; foo.bar(123); alert(foo.bar());
рдореВрд▓ рдирд┐рд╡рд╛рд╕реА / рдмрд╕рдиреЗ рд╡рд╛рд▓реЗ
рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рд╕рднреА рд╕рд░реНрд╡рд░ рдЗрдВрдЬрди рдФрд░ рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕, рдХреНрд░реЛрдо, рд╕рдлрд╛рд░реА 3 +, рдУрдкреЗрд░рд╛ 9.5 + - рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд░ рдФрд░ рдЧреЗрдЯреНрдЯрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рддрд╛рдХрд┐ рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд░рд╣реЗред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ:
1. рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рд░рд┐рдХреЙрд░реНрдбред ORM рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ:
for (var i in topics.comments); // vs for (var i in topics.loadComments());
2. рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдПрдкреА рд╣реИ, рдЬреЛ рдЧреБрдгреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдФрд░ рдЗрд╕реЗ рдмрджрд▓рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХ рд╣реИ)ред
рдРрд╕реЗ рдЧреЗрдЯрд░ / рд╕реЗрдЯрд░ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ:
рд╡рд╛рдпрд╛ рд╡рд╕реНрддреБ:
function Foo(bar) { this._bar = bar; }; Foo.prototype = { set bar (bar) { this._bar = bar; }, get bar () { return this._bar; } }; var foo = new Foo; foo.bar = 123; alert(foo.bar);
__DefineGetter__ рдФрд░ __defineSetter__ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ:
function Foo(bar) { var _bar = bar; this.__defineGetter__("bar", function(){ return _bar; }); this.__defineSetter__("bar", function(val){ _bar = bar; }); }; var foo = new Foo; foo.bar = 123; alert(foo.bar);
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛
рдЗрд╕рд╕реЗ, рдЖрдк рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЧреЗрдЯрд░реНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ:
return (typeof {}.__defineGetter__ == 'function');
рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?
рдЖрдк
.__lookupGetter__
рдФрд░
.__lookupSetter__
рдорд╛рдзреНрдпрдо рд╕реЗ
.__lookupGetter__
рдпрд╛ рд╕реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
function extend(target, source) { for ( var prop in source ) { var getter = source.__lookupGetter__(prop), setter = source.__lookupSetter__(prop); if ( getter || setter ) { if ( getter ) target.__defineGetter__(prop, getter); if ( setter ) target.__defineSetter__(prop, setter); } else a[i] = b[i]; } return target; }
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореВрд▓ рд╕реНрд░реЛрдд рдХреЗ рд▓рдХреНрд╖рд┐рдд рдорд╛рдиреЛрдВ рдХреЛ рд╣рдорд╛рд░реЗ рд▓рдХреНрд╖реНрдп рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЧреЗрдЯрдЯрд░ / рд╕реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рдиред
рдХреНрдпрд╛ рдпрд╛рдж рд░рдЦрдирд╛
рдЬреЙрди рд░реЗрд╕рд┐рдЧ рдХреА рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:
* рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдЧреЗрдЯреНрдЯрд░ рдФрд░ / рдпрд╛ рд╕реЗрдЯрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреЛ рдЧреЗрдЯрд░реНрд╕ рдпрд╛ рд╕реЗрдЯрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ
* рдЧреЗрдЯреНрдЯрд░ рдпрд╛ рд╕реЗрдЯрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛delete object[name];
рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИdelete object[name];
ред рдпрд╣ рдХрдорд╛рдВрдб рдЧреЗрдЯреНрдЯрд░ рдФрд░ рд╕реЗрдЯрд░ рджреЛрдиреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк рдПрдХ рдЪреАрдЬрд╝ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рджреВрд╕рд░реЗ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЗрд╕реЗ рд╕рд╣реЗрдЬрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдбрд┐рд▓реАрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛
* рдЬрдм рдЖрдк __defineGetter__ рдпрд╛ __defineSetter__ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЪреБрдкрдЪрд╛рдк рдкрд┐рдЫрд▓реЗ рдЧреЗрдЯреНрдЯрд░ рдпрд╛ рд╕реЗрдЯрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╣реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред
* рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХ рд╕рд░рд▓ рд╕реНрдирд┐рдкреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:
javascript:foo={get test(){ return "foo"; }};alert(foo.test);
MooTools
рдореНрдпреВрдЯрд▓реНрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдФрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдкреИрдЪ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛ , рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ (рд╕реНрд░реЛрдд рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ) рдЗрд╕реЗ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░реНрд╕ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВред
рддреЛ рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдХреНрдпрд╛ рд╣реИ?
var Foo = new Class({ set test : function () { console.log('test is set'); }, get test : function () { console.log('test is got'); return 'test'; }, }); foo.test = 1234; // test is set alert(foo.test); // test is get
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╡рд░реНрдЧ рдХреЗ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░ рдХреЛ рднреА рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреНрд╕ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрдбреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рд╕рднреА рдХрд╛рд░реНрдп рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдлрд╝рд╛рдЗрд▓ [рдирд╛рдо: рдХреНрд▓рд╛рд╕] рдореЗрдВ рд╣реЛрдВрдЧреЗред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░, рдмрд╣реБрдд рдКрдкрд░, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдпрджреНрдпрдкрд┐ рд╣рдордиреЗ рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ - рдпрд╣ рдмреАрдорд╛ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИред
var implementGettersSetters = (typeof {}.__lookupGetter__ == 'function') ? function (target, source) { for (var key in source) { var g = source.__lookupGetter__(key), s = source.__lookupSetter__(key); if ( g || s ) { if (g) target.__defineGetter__(key, g); if (s) target.__defineSetter__(key, s); } } return target; } : function (target, source) { return target; };
рдмреЗрд╢рдХ, рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЧреЗрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдпрд╣ рдмрд╕ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рдХреЛ рдЧрд▓рддреА рд╕реЗ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЗрдиреЗ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдкрд░ рд╣реБрдХ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реЛрдЪрд╛ рдХрд┐ рдЧрдзреЗ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реИ ред
рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ __lookupGetter__ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдЕрдм рд╣рдореЗрдВ рдХрдХреНрд╖рд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо (рд╡рд┐рд╕реНрддрд╛рд░) рдХреЗ рджреМрд░рд╛рди рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рдмрд╕рдиреЗ рд╡рд╛рд▓реЗ рдорд┐рд▓ рдЬрд╛рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
// var Class = this.Class = new Type('Class', function(params){ // newClass.$constructor = Class; newClass.prototype.$constructor = newClass; newClass.prototype.parent = parent; // , (, , !) : implementGettersSetters(newClass.prototype, params);
рдПрдХ рдЕрд▓рдЧ рдЖрдВрджреЛрд▓рди рдЧреЗрдЯрд░реНрд╕ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ (рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреНрд╕) рд╕реЗ рдмрд╕рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореНрдпреВрдЯреЗрдЯрд░ рдвреВрдВрдвреЗрдВ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ:
Class.Mutators = { // ... Implements: function(items){ Array.from(items).each(function(item){ var instance = new item; for (var key in instance) implement.call(this, key, instance[key], true); // : implementGettersSetters(this.prototype, instance); }, this); } };
рдпрд╣реА рд╣реИ, рдЕрдм рдмрд╕рдиреЗ рдФрд░ рдЧреЗрдЯрд░реНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ)
var Foo = new Class({ initialize : function (name) { this.name = name; }, set test : function () { console.log(this.name + ' test is set'); }, get test : function () { console.log(this.name + ' test is got'); return 'test'; }, }); var Bar = new Class({ Extends : Foo }); var Qux = new Class({ Implements : [ Foo ] }); var foo = new Foo('foo'); foo.test = 1234; // foo test is set alert(foo.test); // foo test is got var bar = new Bar('bar'); bar.test = 1234; // bar test is set alert(bar.test); // bar test is got var qux = new Qux('qux'); qux.test = 1234; // qux test is set alert(qux.test); // qux test is got
рджрд┐рд▓рдЪрд╕реНрдк рд▓рд┐рдВрдХ:
Object.defineProperty
- рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдЧреБрдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг, рдЬреИрд╕реЗ рдХрд┐ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп, рдкреНрд░рд╛рдкреНрдд, рд╕реЗрдЯ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп, рдЧрдгрдирд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп
Object.create
- рдЖрд╕рд╛рдиреА рд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред