(рдкреБрд░рд╛рд▓реЗрдЦ) рдорд╛рддреГреЗрд╢рдХрд╛.рдЬрд╕ - MK.Object

рд▓реЗрдЦ рдкреБрд░рд╛рдирд╛ рд╣реИред рдирдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдорд╛рддреГреЗрд╢рдХрд╛ рджреЗрдЦреЗрдВред


рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ, рд╣рдо рдореЗрдЯреНрд░реАрд╢реЛрдХрд╛ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд╕рд╛рде рдорд┐рд▓реЗ рдереЗ: рдмрд╛рдзреНрдпрдХрд╛рд░реА рддрддреНрд╡, рдШрдЯрдирд╛рдПрдВ, рд╡рд┐рд░рд╛рд╕рддред рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рдЦреБрдж рд╕реЗ рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ рдерд╛: "рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдерд┐рддрд┐ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд╛рд╕рд╡рд░реНрдб рдХреИрд╕реЗ рджрд┐рдЦрд╛рдирд╛ рд╣реИ) рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ (рд▓реЙрдЧрд┐рди, рдкрд╛рд╕рд╡рд░реНрдб," рдореБрдЭреЗ рдпрд╛рдж рд░рдЦреЗрдВ ") рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреИрд╕реЗ рдХрд░реЗрдВред"

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

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


рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .jset рд╡рд┐рдзрд┐ рдХрд╛ .jset :
 var mkObject = new MK.Object(); mkObject.jset( 'a', 1 ); console.log( mkObject.toJSON() ); // { a: 1 } 


.Jset рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг: finom.imtqy.com/matreshka/docs/Matreshka.Object.htmljset
.TJJSON рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг : finom.imtqy.com/matreshka/docs/Matreshka.Object.html#toJSON
рдЕрдм рд╣рдо рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдирдИ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 var mkObject = new MK.Object(); mkObject.jset( 'a', 1 ); mkObject.a = 2; console.log( mkObject.toJSON() ); // { a: 2 } 

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо Matreshka рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 mkObject.bindNode( 'a', '.my-element' ); mkObject.on( 'change:a', handler ); 

рдЕрдЧрд░ рд╣рдо .toJSON рд╡рд┐рдзрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХреБрдВрдЬреА рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдЕрдкрдиреА рдХреБрдВрдЬреА рдХреЛ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ .toJSON рддреЛ рд╣рдо рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ:
 var mkObject = new MK.Object(); mkObject.jset( 'a', 1 ); mkObject.b = 3; console.log( mkObject.toJSON() ); // { a: 1 } 

рдЖрдк .addJSONKeys рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдВрдЬреА рд╕реВрдЪреА рдореЗрдВ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ
Doc: finom.imtqy.com/matreshka/docs/Matreshka.Object.html#addJSONKeys
 mkObject.addJSONKeys( 'b', 'c' ); 

рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд┐рдпрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдпрджрд┐ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рдЧреБрдг .toJSON рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП, рд╣рдореЗрд╢рд╛ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рдмрдЬрд╛рдп .jset рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрджрд┐ рдЪрд╛рдмрд┐рдпрд╛рдБ рдЬреНрдЮрд╛рдд рд╣реИрдВ, рддреЛ, рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рд╣рдореЗрд╢рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ:
 var MyClass = Class({ 'extends': MK.Object, constructor: function( data ) { this .initMK() .jset({ //    a: 1, b: 2, c: 3 }) .set( data ) //   (data -    ) ; } }); 

.initMK рдХреЙрд▓ рдкрд░ рдзреНрдпрд╛рди .initMK ред рдпрд╣рд╛рдБ рд╡рд╣ рди рдХреЗрд╡рд▓ рдИрд╡реЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ "рд╡рд┐рд╢реЗрд╖" рдкреНрд░реЙрдкрд░реНрдЯреАрдЬрд╝ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХреАрдЬрд╝ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ-рд╕реЗрдЯ рднреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдбреЗрдЯрд╛ рдХреЛ "modify" рдкрд░ "modify" рдШрдЯрдирд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
 var mkObject = new MK.Object(); mkObject.jset({ a: 1, b: 2 }); mkObject.c = 3; mkObject.on( 'modify', function() { alert( 'Data is changed' ); }); mkObject.a = 4; //   mkObject.b = 5; //   mkObject.c = 6; //   ,    "c"  ,   

рдпрджрд┐ рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рддрд░реНрдХ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ:
 var mkObject = new MK.Object({ a: 1, b: 2 }); //   ,   var mkObject = new MK.Object(); mkObject.jset({ a: 1, b: 2 }); 

рдЖрдк .each рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 var mkObject = new MK.Object(); mkObject.jset({ a: 1, b: 2 }); mkObject.c = 3; mkObject.each( function( item, key ) { console.log( key ); }); //  'a', 'b' 

Doc: finom.imtqy.com/matreshka/docs/Matreshka.Object.html#each

рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ .hasOwnProperty рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ рдореЗрдВ рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдпрд╛ рдирд╣реАрдВ
 var mkObject = new MK.Object(); mkObject.jset( 'a', 1 ); mkObject.b = 2; alert( mkObject.hasOwnProperty( 'a' ) ); // true alert( mkObject.hasOwnProperty( 'b' ) ); // false ('b'   ) 

рдпрд╣ рдЖрдкрдХреЛ for..in рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП:
 for( var i in mk ) if( mk.hasOwnProperty( i ) ) { doSomething(i, mk[i]) } 

UPD : Object.defineProperty рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдХрд╛рд░рдг рдЖрдард╡реЗрдВ рдЧрдзреЗ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдРрд╕реЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдирд╛рдо рдЦреБрдж рдмреЛрд▓рддреЗ рд╣реИрдВ:
.keyOf , рдЬреЛ рдорд╛рди рджреНрд╡рд╛рд░рд╛ рдПрдХ рдХреБрдВрдЬреА рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдХреБрдВрдЬреА рджреЗрддрд╛ рд╣реИ (рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП .indexOf рдЕрдиреБрд░реВрдк)ред
.keys рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА .keys ред
.removeJSONKeys , рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рдХреБрдВрдЬреА рдХреЗ рд╕реЗрдЯ рд╕реЗ рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╣рдЯрд╛ рд░рд╣рд╛ рд╣реИред

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ: jsbin.com/disigiza/1/edit
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:
  ... constructor: function () { this .initMK() .jset({ //   userName: '', password: '', rememberMe: true }) .bindings() .events(); }, ... 

рдФрд░ рдлрд┐рд░, рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо .toJSON рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВ:
  ... login: function () { if (this.isValid) { alert( JSON.stringify( this.toJSON() ) ); } return this; } ... 


рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ


рдЕрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ Matryoshka рдбреЗрдЯрд╛ рдХреЛ рдЙрди рд░рд╛рдЬреНрдпреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИрдВред рдЕрджреНрднреБрддред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? Backbone.js рд╕реЗ рдПрдХ рд╕рд░рдгреА рдпрд╛ рд╕рдВрдЧреНрд░рд╣ рдХреА рддрд░рд╣ рдХреБрдЫред рд╕рдорд╛рдзрд╛рди MK.Array рд╡рд░реНрдЧ рд╣реИ, рдЬрд┐рд╕рдХреА рдЪрд░реНрдЪрд╛ рдореИрдВ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдХрд░реВрдБрдЧрд╛ред

рд▓реЗрдЦ рдХреЛ рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╕рднреА рдЕрдЪреНрдЫреЗ рдФрд░ рдЕрдЪреНрдЫреЗ рдХреЛрдбрд┐рдВрдЧред

Source: https://habr.com/ru/post/In196886/


All Articles