рд▓реЗрдЦ рдкреБрд░рд╛рдирд╛ рд╣реИред рдирдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдорд╛рддреГреЗрд╢рдХрд╛ рджреЗрдЦреЗрдВред(рдпрд╛рдж рдХрд░реЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА
рдпрд╣рд╛рдВ рд╣реИ )
рд╕рднреА рдХрд╛ рдЕрднрд┐рд╡рд╛рджрдиред рдореИрдВрдиреЗ
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЛ рдЗрд╕ рддрдереНрдп рдкрд░ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рдХрд┐ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╕рд░рдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред Matreshka.js рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рд╕рд░рдгреА
MK.Array
рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рд╡реЗ рдирд┐рдпрдорд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ рд╕реЗ рдХреИрд╕реЗ рднрд┐рдиреНрди рд╣реИрдВ? рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВред рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк
MK.Array
рдореЗрдВ рд╡реЗ рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдПрдХ "рдкрд╛рд░рдВрдкрд░рд┐рдХ" рд╕рд░рдгреА рдореЗрдВ рд╣реИ, рдирд┐рд░реНрдорд╛рддрд╛ рдореВрд▓
Array
рдХреЗ рд╕рдорд╛рди рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред
MK.Array
рд╕реНрдЯреЗрд░реЙрдпрдб рдкрд░ рдПрдХ рд╕рд░рдгреА рд╣реИ рдЬреЛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
- рд╕рдм рдХреБрдЫ
Array
рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╕рдВрд╢реЛрдзрди рдкрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ
- рдЬрд╣рд╛рдБ рд╕рдВрднрд╡ рд╣реЛ рдЪреИрди рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
- рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ Matryoshka рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рдЧреБрдгреЛрдВ рдХреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдмрд╛рдВрдзреЗрдВ рдФрд░ рдХрд╕реНрдЯрдо рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ
рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд▓реЗрдЦ рд╕реЗ gif рдпрд╛рдж рд╣реИ? MK.Array
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп 5 рдмрд╛рддреЗрдВ рд╣реИрдВ:
0. Array
рд╕реЗ
MK.Array
рд▓рд┐рдП рдЖрдП рддрд░реАрдХреЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗ рдирд╣реАрдВ
MK.Array
ред
MK.Array
рдХреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡рд░реНрдЧ рдХреЛрдб рдмрд╣реБрдд рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рд╣рдо рддрд░реАрдХреЛрдВ рдХреЗ рдЧрд▓рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ 8 рдореЗрдВ рдХрдИ рдирдП рддрд░реАрдХреЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдХрдиреЗрдХреНрдЯ рди рд╣реЛрдВ,
es5-shim ред рдЬрдм рдПрдХ рдЕрд╕рдорд░реНрдерд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╕рдВрджреЗрд╢ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░реЗрдЧрд╛ред
рдирд╡реАрдирддрдо рдХреНрд░реЛрдо рдмрд┐рд▓реНрдб рдФрд░ рдПрдордбреАрдПрди рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ
Array
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╕рдордп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рд╕рдВрдХрд▓рд┐рдд рдХреА рдЧрдИ рдереАред
1. рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛ рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреА рд╣реИрдВ, рджреЛ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИрдВ:
"modify"
рдФрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдоред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
.push
рдкрджреНрдзрддрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рди рдХреЗрд╡рд▓
"modify"
рд╣реИ, рдмрд▓реНрдХрд┐
"push"
рднреА
"push"
ред
UPD : рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдШрдЯрдирд╛
"add"
рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рдЬрдм рд╣рдЯрд╛рддреЗ рд╣реБрдП -
"remove"
ред
var mkArray = new MK.Array; mkArray.on( 'push', function() { alert( 'push' ); }); mkArray.on( 'modify', function() { alert( 'modify' ); }); mkArray.push( 42 );
рд╕рдВрд╢реЛрдзрд┐рдд рддрд░реАрдХреЛрдВ рдХреА рд╕реВрдЪреА:
2. рдЙрдЪрд┐рдд рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП,
silent
рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╕рд░рдгреА рдореЗрдВ рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ
silentPush
рдЙрдкрдпреЛрдЧ
silentPush
(рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореВрд▓ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдкреВрдВрдЬреАрдХреГрдд рд╣реИ)ред
var mkArray = new MK.Array; mkArray.silentPush( 42 );
рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдиреЗ рдкрд░ рд╕рдВрд╢реЛрдзрд┐рдд рди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдХреА рд╕реВрдЪреА:
3 .ред
.forEach
рд╡рд┐рдзрд┐, рдЬреЛ рдореВрд▓
Array
рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ
undefined
,
MK.Array
рдкрд░
MK.Array
:
var mapped = mkArray .forEach( function() { ... }) .forEach( function() { ... }) .map( function() { ... }) ;
4. рдореВрд▓
Array
рддрд░реАрдХреЗ, рдЬреЛ
Array
рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдорд╛рдзреНрдпрдорд┐рдХ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ, рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред
.push
,
.unshift
)
рдпрд╛ рд╣рдЯрд╛рдП рдЧрдП рддрддреНрд╡ ( .pop
, .shift
) (
UPD : 0.1 рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд),
MK.Array
рдЦреБрдж рдХреЛ
MK.Array
рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдореБрдЭреЗ рддрд░реАрдХреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ (рдХреБрдЫ рдРрд╕реА рдЪреАрдЬ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдХрдореА рдереА) рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдРрд╕реЗ рддрд░реАрдХреЗ рдЬрд┐рдирдХрд╛ рдкреНрд░рд╛рдердорд┐рдХ рдХрд╛рд░реНрдп рдкрд╛рд░рдВрдкрд░рд┐рдХ рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рдо рдХрд╛ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐
.indexOf
рдПрдХ рдирдВрдмрд░ рджреЗрддрд╛ рд╣реИ,
.toString
- рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ ...
mkArray .push( 1, 2, 3, 4 ) .unshift( 0 ) .push( 5 ) .forEach( function() { ... } ) .sort() .reverse() ;
рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдореБрдЖрд╡рдЬрд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
.push
рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП:
var array = new Array( 1, 2, 3, 4 ), mkArray = new MK.Array( 1, 2, 3, 4 ), arrayLength, mkArrayLength; arrayLength = array.push( 6, 7 ); mkArray.push( 6, 7 ); mkArrayLength = mkArray.length;
5. Iterator рдореЗрдердб (
.forEach
,
.forEach
,
.filter
, ...) рдкрд╣рд▓реЗ рдЖрд░реНрдЧреНрдпреВрдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдлрдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рддреАрд╕рд░рд╛ рдЖрд░реНрдЧреНрдпреВрдореЗрдВрдЯ рдПрдХ рджреЗрд╢реА рдРрд░реЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЖрдард╡реЗрдВ рдЧрдзреЗ рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд
Array.prototype[ method ].apply
рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИред рдкреВрд░реА
Array.prototype[ method ].apply
рд╕реЗ Matryoshka рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдЗрд╕рд▓рд┐рдП, рддрд░реАрдХреЛрдВ рдХрд╛ рдкреНрд░рдХреНрд╖реЗрдкрдг рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ:
1.
MK.Array
рдЙрджрд╛рд╣рд░рдг
Array
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
2.
Array.prototype[ name ].apply( array, arguments );
рд╡рд┐рдзрд┐
Array.prototype[ name ].apply( array, arguments );
3.
MK.Array
рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рд╛рдлрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдореА
Array
рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
mkArray.forEach( function( item, index, array ) { console.log( array === mkArray );
рдпрд╣ рдореИрдЯреНрд░реАрд╢реЛрдХрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЬреЛ рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдмреАрдЪ рдШрдмрд░рд╛рд╣рдЯ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред рдЧреБрд╕реНрд╕реЗ рд╡рд╛рд▓реА рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдЬрд▓реНрджрдмрд╛рдЬреА рди рдХрд░реЗрдВред рдЕрдЧрд░ рдпрд╣ рд╣рдмреНрд░ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛, рддреЛ рдореИрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдмрддрд╛рдКрдВрдЧрд╛: рдореИрдЯреНрд░реАрд╢рдХрд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
UPD : рд╕рдВрд╕реНрдХрд░рдг 1.0 рдореЗрдВ, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ IE8 рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдг рддрдп рдХреА рдЬрд╛рдПрдЧреА
рд╡рд┐рд░рд╛рд╕рдд
Matryoshka-array рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ Matryoshka рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред
var MyArray = Class({ 'extends': MK.Array, constructor: fucntion() { this.initMK(); } });
.initMK
рд╡рд┐рдзрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, Matryoshka рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдЫрджреНрдо-рдирд┐рдЬреА рдЧреБрдгреЛрдВ рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд░рдгреА рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рддрд╣рдд рдкрд╛рда рдореИрдЯреНрд░рд┐рдпреЛрд╢рдХрд╛ 0.1 рдХреА рд░рд┐рд╣рд╛рдИ рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдЦреЛ рджрд┐рдпрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдкрдврд╝ рдирд╣реАрдВ рд╕рдХрддреЗредрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ
MK.Array
рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рд░реЗрдбреА-рдЯреВ-
MK.Array
рдХреНрд▓рд╛рд╕ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдПрдкреНрд▓реАрдХреЗрд╢рди рдореЗрдВ рдЪреАрдиреА
MK.Array
ред рдХреЗрд╡рд▓ рдПрдХ "рд▓реЗрдХрд┐рди" рд╣реИ: рдиреЗрд╕реНрдЯреЗрдб рдЧреБрдбрд╝рд┐рдпрд╛ рд╕рд░рдгреА рдбреЗрдЯрд╛ рдХреЛ рдПрд▓реАрдореЗрдВрдЯ рдХреЗ рддрддреНрд╡реЛрдВ рд╕реЗ рдмрд╛рдБрдз рдирд╣реАрдВ рд╕рдХрддреА рд╣реИред
.bindElement
, рдЖрдк рдПрдХ рддрддреНрд╡ рдХреЛ
.bindElement
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рд╕реЗ
.bindElement
рд╕рдХрддреЗ
.bindElement
, рд▓реЗрдХрд┐рди рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ: рд╕реВрдЪрдХрд╛рдВрдХ рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрд╢реЛрдзрди рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реИ, рддреЛ рдПрдХ рд╕реВрдЪреА рд╣реИ рдЬрд┐рд╕реЗ рд╕рд░рдгреА рдмрджрд▓рдиреЗ рдкрд░ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбреЛрдо рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рдЖрдкрдХреЛ
"push"
рдФрд░
"splice"
рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдПрдХрдорд╛рддреНрд░ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреА рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкреЛрд╕реНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреНрд▓рд┐рдк (рдЕрднреА рддрдХ)
рдЕрдирдбрдХреНрд╡рд╛рдореЗрдВрдЯреЗрдб MK.DOMArray рдкреНрд▓рдЧрдЗрди рдХреЗ рдХрд╛рдо рдХрд╛ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рд╣реИ, рдЬреЛ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддреЗ рд╣реБрдП, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ DOM рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред рдкреНрд▓рдЧрдЗрди рдПрдХ рдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, Matryoshka рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдХрд░реАрдм рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдкрд░ DOM рдХреЛ рдЦреБрдж рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдкреНрд░рдпреЛрдЧ рдЗрддрдирд╛ рд╕рдлрд▓ рд░рд╣рд╛ рдХрд┐ рд╢рд╛рдпрдж, рдкреНрд▓рдЧ-рдЗрди рдХреЛрдб
MK.Array
рдХреЛрдб рдореЗрдВ
MK.Array
рд╣реЛ рдЬрд╛рдПрдЧрд╛ред DOM рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдЗрд╖реНрдЯрддрдо рд╣реИрдВ: рдЬрдм рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирдП рддрддреНрд╡реЛрдВ рдХреЛ рдкреЗрдЬ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рдкрд░, рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ
MK.DOMArray
-рдЕрд░реЗ (рдпрд╛ рдЗрд╕рдХреЗ рд╡рдВрд╢рдЬ:
MK.DOMArray
) рдХреЛ рдмреИрдХрдмреЛрди рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рддрддреНрд╡ рдореЙрдбрд▓ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдБ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
jsbin.com/aZEseWE/16 (рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ
gif рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рдФрд░ рдпрд╣рд╛рдБ:
jsbin.com/eQomoJe/9 рдПрдХ рдЕрдзрд┐рдХ рддрдкрд╕реНрд╡реА рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЗрд╕рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрд░реАрдХреЛрдВ рдХрд╛ рдХреЛрдИ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рд╣реИред рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдЕрддрд┐рд░реЗрдХ рдХреЗ рдмрд╛рд╡рдЬреВрдж рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред
MK.DOMArray
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ (рд╢реБрд░реБрдЖрдд, рдЕрдВрдд, рдордзреНрдп ... рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ), рдпрд╣ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ "рд╕реНрд╡рдпрдВ" рдореЗрдВ рдПрдХ
.renderer
рд╡рд┐рдзрд┐ рд╣реИ рдФрд░, рдпрджрд┐ рдХреЛрдИ рд╣реИ, рддреЛ рджрд┐рдП рдЧрдП рддрддреНрд╡ рдХреЛ рдкреЗрдЬ рдЯреНрд░реА рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдХрд┐рд╕реА рдИрд╡реЗрдВрдЯ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред
"render"
ред
var Example = Class({ 'extends': MK.DOMArray, constructor: function() { this
рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдХрд╛рд░реНрдп
"render"
рдЗрд╡реЗрдВрдЯ рдХреЛ рдкрдХрдбрд╝рдирд╛ рд╣реИ рдФрд░
"__this__"
рд▓рд┐рдП рдмрд╛рдзреНрдп рддрддреНрд╡реЛрдВ рдХреЗ рдЕрдВрджрд░ рддрддреНрд╡реЛрдВ рдХреЛ
"__this__"
ред
var ExampleObject = Class({ 'extends': MK.Object, constructor: function( o ) { this .initMK() .jset( o ) .on( 'render', function( evt ) { this
рд╡рд┐рдЪрд╛рд░рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдкреНрд▓рдЧрдЗрди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛:
var table = MK.Table({ table: '.my-table' rows: [{ title: 'A', key: 'a' }, { title: 'B', key: 'b' }] }); table.push({ a: 'Fuck', b: 'Yeah' });
рдЪрдХреНрд░ рдХреЗ рдЕрдВрдд рдореЗрдВ
рдореИрдЯреНрд░реАрд╢рдХрд╛ рдПрдХ рдХреЙрдореНрдкреИрдХреНрдЯ, рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реАрдЦрдиреЗ рд╡рд╛рд▓реА рд░реВрдкрд░реЗрдЦрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддреА рд░рд╣реЗрдЧреАред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рддреИрдпрд╛рд░реА рдХреЗ рд╕реНрддрд░ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдореИрдЯреНрд░рд┐рдпреЛрд╢рдХрд╛ рд╕реАрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░, рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░рдЪрд┐рдд рдХреЛрдб рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛрдиреЗ рдкрд░, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдХреЙрдореНрдкреИрдХреНрдЯрдиреЗрд╕ рдФрд░ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдкреНрд▓рдЧрдЗрдиреНрд╕ рдФрд░ рдРрдб-рдСрди рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рджреЗрддрд╛ рд╣реИред рд╕рдордп рдХреЗ рд╕рд╛рде, jQuery рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (
UPD : рдкрд╣рд▓реЗ рд╣реА рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛), Internet Explorer 8 рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди, рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдмрд╣реБрдд рдХреБрдЫ ...
рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╕рдм рдЕрдЪреНрдЫрд╛ рд╣реИред
PS рдЕрдм README рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ
рд░реЛрдбрдореИрдк рд╣реИред