рдореИрдВ рдЖрдкрдХреЛ createClass рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдХреНрдпрд╛ рдЗрд╕ рдирд┐рд░реНрдорд╛рддрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ:
1. рдХреЛрдб рд╕реНрд╡рдпрдВ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд▓рдЧрддрд╛ рд╣реИ
2. рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
3. рдЕрдореВрд░реНрдд рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
4.
рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рд╡рд░реНрдЧреАрдп рдЧреБрдгреЛрдВ рдХрд╛ рдЕрдиреБрд░рдХреНрд╖рдг5. рдЪрддреБрд░ рдЙрджрд╛рд╣рд░рдг (рд╡рд┐рдзрд┐) рд╡рд░реНрдЧреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ
рддреЛ, рддреБрд░рдВрдд рдПрдХ рдЙрджрд╛рд╣рд░рдг:
var Animal = createClass({ abstracts: ['say'], construct: function(name) { this.name = name; }, eat: function() { return 'ou yeah...'; } }); var Kitty = createClass({ extend: Animal, say: function() { return this.name + ' said: RrrrRRR...Mau..'; }, eat: function() { return Animal.fn.eat.call(this) + 'FISH!!' } }); var Doggy = createClass({ extend: Animal, construct: function(name) { Animal.call(this, name); console.log('doggy have been created'); }, say: function() { return this.name + ' said: GAV!'; }, eat: function() { return Animal.fn.eat.call(this) + 'MEAT!!' } }); var sharik = new Doggy('sharik');
рд╕рднреА рд╡рд░реНрдЧ рдЧреБрдгреЛрдВ рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕реНрдерд┐рд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╕реНрдерд┐рд░ рдЧреБрдг, рдЬреЛ рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреА)ред
рдкрд╢реБ рд╡рд░реНрдЧ рдореЗрдВ рдЙрдХреНрдд рдкрджреНрдзрддрд┐ рдХрд╛ рдЕрдореВрд░реНрддрди рд╣реИред рдХрд┐рдЯреНрдЯреА рдФрд░ рдбреЙрдЧреА рдХрдХреНрд╖рд╛рдПрдВ рдкрд╢реБ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рддреА рд╣реИрдВ рдФрд░ рдХрд╣рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рдЪреВрдВрдХрд┐ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХрд┐рдЯреНрдЯреА рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкрд╢реБ рд╕реЗ рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдбреЙрдЧреА рдореЗрдВ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреЗрд░реЗрдВрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдПрдирд┐рдорд▓.рдХреЙрд▓ (рдпрд╣, рдирд╛рдо) рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореВрд▓ рд╡рд░реНрдЧ рдХреА рдЦрд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЛ Animal.fn.eat.call рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣) Animal.prototyp.eat.call (рдпрд╣) рдХреЗ рд╕рдорд╛рди рд╣реИ
рдЕрдЧрд▓реЗ:
var Singleton = createClass({ statics: { construct: function() { this._instance = null; }, getInstance: function() { if(this._instance === null) { this._instance = new this(); } return this._instance; } } }); var SuperDoggy = createClass({ extend: [Animal, Singleton], say: function() { return this.name + ' said: GAV! GAV! GAV!'; } }); var dog1 = SuperDoggy.getInstance(), dog2 = SuperDoggy.getInstance(); dog1.name = 'Bob'; console.log(dog1 === dog2);
рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдФрд░ рдПрдХ рд╕реНрдерд┐рд░ getInstance рдкрджреНрдзрддрд┐ рд╣реИред рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд┐рдВрдЧрд▓рдЯрди рдкреИрдЯрд░реНрди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред SuperDoggy рдХреЛ рджреЛ рдкрд╢реБ рд╡рд░реНрдЧреЛрдВ, рд╕рд┐рдВрдЧрд▓рдЯрди рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдФрд░ рдЙрдХреНрдд рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдХрдХреНрд╖рд╛ рдмрдирд╛рддреЗ рд╕рдордп рдФрд░ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╕рдордп рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд╕реНрдерд┐рд░ рдЧреБрдгреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдХреНрд▓рд╛рд╕ рдХреЛ рд╣реА рдмрдирд╛рддрд╛ рд╣реИ?
рд╡рд┐рдзрд┐ рдХреЗ рдЙрджрд╛рд╣рд░рдг "рдЙрджрд╛рд╣рд░рдг":
console.log( dog2.instanceOf(Kitty) === false );
рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдореВрд▓ рд░реВрдк рд╕реЗ рдбреЗрд╡рд┐рдб рдлреНрд▓реЗрдВрдЧрди рдХреА рдкреБрд╕реНрддрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ 5 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
рдкреБрд╕реНрддрдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг ред рдирддреАрдЬрддрди, рдпрд╣ рдХреЛрдб рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдПрдХ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдЖред
рдЪреВрдВрдХрд┐ рд╕реНрд░реЛрдд рдЗрддрдирд╛ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдпрд╣реАрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ:
function createClass(data) { var abstracts = data.abstracts || [], statics = data.statics || {}, extend = data.extend || []; if(!(extend instanceof Array)) extend = [extend];