рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рднрдВрдбрд╛рд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ - рдирд┐рд░рдВрддрд░

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

рдЕрдм рдореИрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╕реНрдХреЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЬрдм рдкреГрд╖реНрда рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ (рдбреЛрдо рдЯреНрд░реА рддрддреНрдкрд░рддрд╛ рдШрдЯрдирд╛ рд╕реЗ рдкрд╣рд▓реЗ рднреА), рддреЛ рд╣рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдФрд░ рд╕реЗрд╢рдирд╕реНрдЯреЛрд░реЗрдЬ) рдкрд░ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рдЬреЗрдПрд╕рдПрди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдбрд┐рд╕реЗрд░реНрдмрд▓рд╛рдЗрдЬ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреБрдЫ рдЪрд░ рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВред
localObject = JSON.parse( localStorage.getItem( '_myStorage' ) ); // "{'a':1, 'b':2}" тЖТ {a:1, b:2} 

рдлрд┐рд░, рдкреНрд░рддреНрдпреЗрдХ рдПрди рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд░рд┐рд╡рд░реНрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ:
 localStorage.setItem( '_myStorage', JSON.stringify( localObject ) ); 

Onbeforeunload рдШрдЯрдирд╛ рдХреЗ рд╕рд╛рде, рд╡рд╣реА рдХрд░реЗрдВред

рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд░рд▓ рд╣реИ (рдХрд╛рд░реНрдп рдХрд╛ рдХрдард┐рдирд╛рдИ рд╕реНрддрд░ рдХрдо рд╣реИ рдФрд░ рдПрдХ рд╢реБрд░реБрдЖрдд рддрдХ рднреА рд╕реБрд▓рдн рд╣реИ)ред рд▓реЗрдХрд┐рди, рд╣рд░ рдХрд┐рд╕реА рдиреЗ (рдЕрдкрдиреЗ рдЖрдк рдХреЛ) рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдРрд╕рд╛ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ред
рдСрдмреНрдЬреЗрдХреНрдЯрд╕реНрдЯреЛрд░реЗрдЬ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛрдб
 var ObjectStorage = function ObjectStorage( name, duration ) { var self, name = name || '_objectStorage', defaultDuration = 5000; //     ,       , //      , //   duration ( ) if ( ObjectStorage.instances[ name ] ) { self = ObjectStorage.instances[ name ]; self.duration = duration || self.duration; } else { self = this; self._name = name; self.duration = duration || defaultDuration; self._init(); ObjectStorage.instances[ name ] = self; } return self; }; ObjectStorage.instances = {}; ObjectStorage.prototype = { // type == local || session _save: function ( type ) { var stringified = JSON.stringify( this[ type ] ), storage = window[ type + 'Storage' ]; if ( storage.getItem( this._name ) !== stringified ) { storage.setItem( this._name, stringified ); } }, _get: function ( type ) { this[ type ] = JSON.parse( window[ type + 'Storage' ].getItem( this._name ) ) || {}; }, _init: function () { var self = this; self._get( 'local' ); self._get( 'session' ); ( function callee() { self.timeoutId = setTimeout( function () { self._save( 'local' ); callee(); }, self._duration ); })(); window.addEventListener( 'beforeunload', function () { self._save( 'local' ); self._save( 'session' ); }); }, //  ,     (clearTimeout( storage.timeoutId )) timeoutId: null, local: {}, session: {} }; 



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
 var storage = new ObjectStorage; storage.local = {a:4, b: {c:5}}; storage.session = {a:7, b: {c:8}}; b = storage.local.b; bc = {d:6}; 


рдкреГрд╖реНрда рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░реЗрдВ
 var storage = new ObjectStorage; console.log( storage ); /* { _name: ..., duration: ..., local: {a:4, b: {c: {d: 6}}}, session: {a:7, b: {c :8}} } */ 


рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдСрдмреНрдЬреЗрдХреНрдЯрд╕реНрдЯреЛрд░реЗрдЬ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдЖрдк рджреЛ рддрд░реНрдХ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдирд╛рдо - рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдФрд░ рдЕрд╡рдзрд┐ рдореЗрдВ рдХреБрдВрдЬреА рдХрд╛ рдирд╛рдо - рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рдЕрдВрддрд░рд╛рд▓ред
 new ObjectStorage( '_myStorage', 1000 ); 

рдЖрдк рдирд╛рдо рдорд╛рдирдХ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
 new ObjectStorage( null, 1000 ); 

рдпрд╛ рдЖрдк рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмрд╛рдж рдХреА рдЕрд╡рдзрд┐ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
 var storage = new ObjectStorage; storage.duration = 2000; 

(рдЖрдк рд╕реНрдЯреЛрд░реЗрдЬ рднреА рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ ред_рдирд╛рдо, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ, рдореИрдВрдиреЗ рдПрдХ рдЫрдбрд╝реА рднреА рд░рдЦреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдирд┐рдЬреА рд╕рдВрдкрддреНрддрд┐ :))

рдЗрд╕ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓рд┐рдВрдХ рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рдзрд╛рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреЗрд╢реЗрд╡рд░реЛрдВ:


рд╕рд╛рдорд╛рдиреНрдп рд╕рд╣рдорддрд┐:


рдЕрдЪреНрдЫрд╛ред

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


All Articles