рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджрд┐рд▓рдЪрд╕реНрдк рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдЯрди рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрдВрджрд░ рднрд╛рд╖рд╛ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдПрдХ рдЕрдкреНрд░рд┐рдп рдХрд╛рд░рдХ рджреНрд╡рд╛рд░рд╛ рдЫрд┐рдкреА рд╣реБрдИ рд╣реИрдВ - рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдФрд░ рдЕрдиреНрдп рдмрдХрд╡рд╛рд╕ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред рдлрд┐рд░ рднреА, рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рдЕрдк-рдЯреВ-рдбреЗрдЯ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдпреЗ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЕрднреА рдФрд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЖрджрдд рд╕реЗ рдмрд╛рд╣рд░, рдиреЛрдб рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рднреАред рд╣рдо рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ IE6 + рдореЗрдВ рдХрд╛рдо рдХрд░реЗред



рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЧреИрд░-рдЧреБрдкреНрдд рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдЬреЛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдЧреЗрдЯрд░реНрд╕ рдФрд░ рдмрд╕рдиреЗ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореВрдЯреВрд▓ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдереЛрдбрд╝рд╛ рдЦреЛрджрддрд╛ рд╣реИред рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдЬреЙрди рд░реЗрдЬрд┐рдЧ рдХреЗ рдПрдХ рд▓реЗрдЦ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдореЗрд░рд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рдФрд░ рдкреНрд░рдпреЛрдЧред

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



- рдЖрд╕рд╛рдиреА рд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред



All Articles