рдХреНрд▓рд╛рд╕ рд░реИрдкрд░реНрд╕: рдИрд╡рд┐рд▓ рдпрд╛ рдЧреБрдб?

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

var Foo = new Class({ Extends: Bar, initialize: function(firstname, lastname) { this.parent(firstname); this.lastname = lastname; }, sayHello: function(){ alert(this.lastname || this.firstname); } });
      
      







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



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП

 MyClass = function() {/* constructor */}; MyClass.prototype.firstMethod = function() {/**/}; MyClass.prototype.secondMethod = function() {/**/}; MyClass.prototype.thirdMethod = function() {/**/};
      
      







рдПрдХ рдЙрдкрдирд╛рдо рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ MyObject.prototype



рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдмрд┐рдирд╛ рдордд рдХрд░реЛ, рд▓реЗрдХрд┐рди рдмрд╕ рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдПрдВ рдирд╣реАрдВред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЕрдВрджрд░ рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реЛрдЧрд╛

 MyClass = new Class({ initialize : function() {/* constructor */}, firstMethod : function() {/**/}, secondMethod: function() {/**/}, thirdMethod : function() {/**/} });
      
      







рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрдорд╛рдг (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд╕рдВрдЧрдд рд╣реИ рдФрд░ рдЗрд╕реЗ "рдХреИрдЪрдСрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ" рдкрдХрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ)

 MyAnotherClass = function() {/* constructor */}; var Tmp = function() { } Tmp.prototype = MyClass.prototype MyAnotherClass.prototype = new Tmp() MyAnotherClass.prototype.constructor = MyAnotherClass;
      
      





рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рд╕рдордЭрд╛рдпрд╛:

 MyAnotherClass = new Class({ Extends: MyClass });
      
      







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



рдУрд╡рд░рд▓реЛрдбреЗрдб рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░





рдФрд░ рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╕рд┐рд░реНрдл рдПрдХ рдФрд░, рдмрд╣реБрдд рд╣рд╛рдирд┐рдХрд╛рд░рдХ рдФрд░ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рдЕрддрд┐рднрд╛рд░рд┐рдд рдирд┐рд░реНрдорд╛рддрд╛:

 var MyClass = function() { /*   */ this.firstMethod = function() {/**/}; this.secondMethod = function() {/**/}; this.thirdMethod = function() {/**/}; /*  ,       */ }; var MyAnotherClass = function() { //  MyClass.apply(this, arguments); this.elseOneMethod = function() {/**/}; }; var myAC = new MyAnotherClass(); console.log(myAC instanceof MyClass); // false
      
      







рдЬрд┐рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ instanceof



рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рд░ рдмрд╛рд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдореЗрдореЛрд░реА рдирджреА рдХреА рддрд░рд╣ рдмрд╣рддреА рд╣реИ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд░реЛрддрд╛ рд╣реИред рдПрдХ рдЬрдЧрд╣ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рджреЗрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЗрд╕реЗ рд╣рд░ рдмрд╛рд░ рдмрдирд╛рдПрдВрдЧреЗред рдпреЗ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ (рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЬреИрд╕реЗ рдХрд┐ рдРрд░реЗ, рдирдВрдмрд░ рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ), рдЙрдиреНрд╣реЗрдВ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ hasOwnProperty



рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдирд┐рд╖реЗрдзрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕реИрдХрдбрд╝реЛрдВ рдмрд╛рд░):

 var MyClass = function() { this.method1 = function(){}; }; MyClass.prototype.method2 = function(){}; var myClass = new MyClass; console.log(myClass.hasOwnProperty('method1')); // true console.log(myClass.hasOwnProperty('method2')); // false var Foo = function() { this.method1 = function(){}; this.method2 = function(){}; this.method3 = function(){}; this.method4 = function(){}; this.method5 = function(){}; this.method6 = function(){}; this.method7 = function(){}; this.method8 = function(){}; this.method9 = function(){}; } var Bar = function() {}; Bar.prototype.method1 = function(){}; Bar.prototype.method2 = function(){}; Bar.prototype.method3 = function(){}; Bar.prototype.method4 = function(){}; Bar.prototype.method5 = function(){}; Bar.prototype.method6 = function(){}; Bar.prototype.method7 = function(){}; Bar.prototype.method8 = function(){}; Bar.prototype.method9 = function(){}; /** * Chrome 8 * Foo: 260 * Bar: 26 * Firefox 3.5 * Foo: 22081 * Bar: 158 */ console.time('Foo'); for (var i = 1000000; i--;) new Foo(); console.timeEnd('Foo'); console.time('Bar'); for (var i = 1000000; i--;) new Bar(); console.timeEnd('Bar');
      
      





рдореИрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реВрдВред рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВред рдЖрдк рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рд░рд╛рдд рдХреЛ рдЪрд╛рд▓реВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ =)

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдЫрджреНрдо рдирд┐рдЬреА рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЪрд░ рднреА рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рднреА рдЙрдЪрд┐рдд рдирд╣реАрдВ рдард╣рд░рд╛рддреЗ рд╣реИрдВред



рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдЕрддрд┐рднрд╛рд░рд┐рдд рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдиреБрдХрд╕рд╛рди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:

* рдмрдЪреНрдЪреЛрдВ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

* рдХрд╛рдлреА рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд

* рд╕реИрдХрдбрд╝реЛрдВ рдмрд╛рд░ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

* рд╡рд┐рдзрд┐рдпрд╛рдБ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИрдВ

* рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ hasOwnProperty рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ



рдирд┐рд╖реНрдХрд░реНрд╖



рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕реБрдЦрдж рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ MooTools.Class рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╕рдорд╛рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рдПрдЧреА рдФрд░ рд╕рдорд░реНрдерди рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧреА - рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ! рдФрд░ рдЙрди рд╕рднреА рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЬрд╛рд╡рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреМрди рдЪрд┐рд▓реНрд▓рд╛рддрд╛ рд╣реИ (рдФрд░ рдпрд╣ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рд╕реБрдВрджрд░ рд╣реИ)



UPD: рдпрд╣ рд╡рд┐рд╖рдп aux рд╕рдВрджреЗрд╢ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛:

рдЬреЗрдПрд╕ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк OOP рдХрд╛ рдкреНрд░рдЪрд╛рд░ рдХрд░реЗрдЧрд╛, рд╡рд░реНрдЧ рдмреИрд╕рд╛рдЦреА рдбрд╛рд▓рдиреЗ рд╕реЗ рдкреЗрдЯ рдирд╣реАрдВ рднрд░рддрд╛ рд╣реИред рднрд╛рд╖рд╛ рдФрд░ рдЙрд╕рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдЬрд╛рдиреЗрдВред


рдореИрдВ рдпрд╣ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ рдврд╛рдВрдЪрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реА рдПрдХрдорд╛рддреНрд░ рд╕рддреНрдп рд╣реИред рдЖрдкрдХреЛ рд╕рд┐рд░реНрдл MooTools.Class рдЬреИрд╕реЗ рд░реИрдкрд░ рд╕реЗ рдмрдЪрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рдХрд┐рд╕реА рдиреЗ рдЖрдкрд╕реЗ рдХрд╣рд╛ рдХрд┐ рдпрд╣, рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред _



All Articles