рдмрд╛рд░-рдмрд╛рд░ рдореИрдВрдиреЗ рдкрдврд╝рд╛ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рднрд╛рд╖рд╛ рдХреА рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЬреЛ рд▓реЛрдЧ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдмрд╕ рднрд╛рд╖рд╛ рд╕реАрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдпрд╣ рдЙрди рдЕрдЬреНрдЮрд╛рдирд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЦреБрдж рдХреЛ рдпрд╛ рддреЛ рдЦреБрдж рднрд╛рд╖рд╛ рдпрд╛ рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддреЗ рдереЗ рдЬрд┐рдирдХреА рд╡реЗ рдЖрд▓реЛрдЪрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдХреНрд╕рд░ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рд╕рд┐рд░реНрдл рдПрдХ рд▓рд┐рдВрдХ рджрд┐рдпрд╛
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() {}; MyClass.prototype.firstMethod = function() {}; MyClass.prototype.secondMethod = function() {}; MyClass.prototype.thirdMethod = function() {};
рдПрдХ рдЙрдкрдирд╛рдо рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ
MyObject.prototype
рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдмрд┐рдирд╛ рдордд рдХрд░реЛ, рд▓реЗрдХрд┐рди рдмрд╕ рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдПрдВ рдирд╣реАрдВред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЕрдВрджрд░ рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реЛрдЧрд╛
MyClass = new Class({ initialize : function() {}, firstMethod : function() {}, secondMethod: function() {}, thirdMethod : function() {} });
рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрдорд╛рдг (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд╕рдВрдЧрдд рд╣реИ рдФрд░ рдЗрд╕реЗ "рдХреИрдЪрдСрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ" рдкрдХрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ)
MyAnotherClass = function() {}; 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() {
рдЬрд┐рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐
instanceof
рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рд░ рдмрд╛рд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдореЗрдореЛрд░реА рдирджреА рдХреА рддрд░рд╣ рдмрд╣рддреА рд╣реИ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд░реЛрддрд╛ рд╣реИред рдПрдХ рдЬрдЧрд╣ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рджреЗрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЗрд╕реЗ рд╣рд░ рдмрд╛рд░ рдмрдирд╛рдПрдВрдЧреЗред рдпреЗ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ (рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЬреИрд╕реЗ рдХрд┐ рдРрд░реЗ, рдирдВрдмрд░ рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ), рдЙрдиреНрд╣реЗрдВ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ
hasOwnProperty
рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдирд┐рд╖реЗрдзрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕реИрдХрдбрд╝реЛрдВ рдмрд╛рд░):
var MyClass = function() { this.method1 = function(){}; }; MyClass.prototype.method2 = function(){}; var myClass = new MyClass; console.log(myClass.hasOwnProperty('method1'));
рдореИрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реВрдВред рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВред рдЖрдк рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рд░рд╛рдд рдХреЛ рдЪрд╛рд▓реВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ =)
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдЫрджреНрдо рдирд┐рдЬреА рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЪрд░ рднреА рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рднреА рдЙрдЪрд┐рдд рдирд╣реАрдВ рдард╣рд░рд╛рддреЗ рд╣реИрдВред
рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдЕрддрд┐рднрд╛рд░рд┐рдд рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдиреБрдХрд╕рд╛рди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
* рдмрдЪреНрдЪреЛрдВ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
*
рдХрд╛рдлреА рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд* рд╕реИрдХрдбрд╝реЛрдВ рдмрд╛рд░ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
* рд╡рд┐рдзрд┐рдпрд╛рдБ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИрдВ
* рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ hasOwnProperty рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдирд┐рд╖реНрдХрд░реНрд╖
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕реБрдЦрдж рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ MooTools.Class рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╕рдорд╛рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рдПрдЧреА рдФрд░ рд╕рдорд░реНрдерди рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧреА - рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ! рдФрд░ рдЙрди рд╕рднреА рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЬрд╛рд╡рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреМрди рдЪрд┐рд▓реНрд▓рд╛рддрд╛ рд╣реИ (рдФрд░ рдпрд╣ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рд╕реБрдВрджрд░ рд╣реИ)
UPD: рдпрд╣ рд╡рд┐рд╖рдп
aux рд╕рдВрджреЗрд╢ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛:
рдЬреЗрдПрд╕ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк OOP рдХрд╛ рдкреНрд░рдЪрд╛рд░ рдХрд░реЗрдЧрд╛, рд╡рд░реНрдЧ рдмреИрд╕рд╛рдЦреА рдбрд╛рд▓рдиреЗ рд╕реЗ рдкреЗрдЯ рдирд╣реАрдВ рднрд░рддрд╛ рд╣реИред рднрд╛рд╖рд╛ рдФрд░ рдЙрд╕рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдЬрд╛рдиреЗрдВред
рдореИрдВ рдпрд╣ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ рдврд╛рдВрдЪрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реА рдПрдХрдорд╛рддреНрд░ рд╕рддреНрдп рд╣реИред рдЖрдкрдХреЛ рд╕рд┐рд░реНрдл MooTools.Class рдЬреИрд╕реЗ рд░реИрдкрд░ рд╕реЗ рдмрдЪрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рдХрд┐рд╕реА рдиреЗ рдЖрдкрд╕реЗ рдХрд╣рд╛ рдХрд┐ рдпрд╣, рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
_