Trabajamos con cookies como una clase javascript

Hola a todos! Hoy quiero considerar una pregunta muy popular: ¿cómo trabajar con cookies? Se ofrecen métodos muy diferentes en todas partes, pero ¿cuál es mejor? No hay una respuesta definitiva a esta pregunta, pero quiero ofrecer una forma muy conveniente, y si está interesado, bienvenido a las castas.

Y así, hasta el punto


Hacemos los métodos get_cookie, set_cookie y delete_cookie:

Código
var _cookie = { get_cookie:function(cookie_name){ var r=document.cookie.match('(^|;) ?'+cookie_name+'=([^;]*)(;|$)'); return r?unescape(r[2]):null }, delete_cookie:function(cookie_name){ var c=new Date(); c.setTime(c.getTime()-1); document.cookie=cookie_name+="=; expires="+c.toGMTString() }, set_cookie:function(name,value,exp_y,exp_m,exp_d,path,domain,secure){ var c=name+"="+escape(value); if(exp_y){ var expires=new Date(exp_y,exp_m,exp_d); c+="; expires="+expires.toGMTString() } if(path)c+="; path="+escape(path); if(domain)c+="; domain="+escape(domain); if(secure)c+="; secure"; document.cookie=c; } } 

Bueno, verificamos estos métodos y, en principio, podemos terminar con esto. Pero esto no es lo que estamos luchando. Me gustaría hacer algo como propiedades c #.

Hay una clase de proxy muy conveniente para esto en javascript.

En resumen, Proxy "envuelve" otro objeto y puede interceptar (y, si lo desea, procesar independientemente) varias acciones con él, por ejemplo, propiedades de lectura / escritura y otras.

Para trabajar con métodos proxy, creamos dos funciones lambda:

Código
 var __methods = { get:(t,m)=>m in t?t[m]:_cookie.get_cookie(m), set:(t,m,v)=>v?_cookie.set_cookie(m,v):_cookie.delete_cookie(m) } 


Ahora creamos la clase Proxy , cuyo primer parámetro es la lista de métodos de la clase, la configuramos en _cookie, pero si no necesita los métodos para trabajar con cookies, especifique {}, el segundo parámetro es el mismo __métodos que acabamos de crear.

Genial, ahora solo escribe una línea simple:

 var cookie = new Proxy(_cookie,__methods); 

Hurra! creamos una clase, llamando (get) a las propiedades de las cuales se llamará el método __methods .get , y asignándole un valor: __methods.set .

Ejemplo de uso:

Código
 var name= prompt("  ","my_name"); var value= parseFloat(prompt("   ( float )","103")); cookie[name] = value; if(value<100) cookie[name]+=10; else cookie[name]-=10; //   alert(",  "+name+" = "+value+"   !"+"\n  :\n"+document.cookie); 


Código completo:
 var _cookie = { get_cookie:function(cookie_name){ var r=document.cookie.match('(^|;) ?'+cookie_name+'=([^;]*)(;|$)'); return r?unescape(r[2]):null }, delete_cookie:function(cookie_name){ var c=new Date(); c.setTime(c.getTime()-1); document.cookie=cookie_name+="=; expires="+c.toGMTString() }, set_cookie:function(name,value,exp_y,exp_m,exp_d,path,domain,secure){ var c=name+"="+escape(value); if(exp_y){ var expires=new Date(exp_y,exp_m,exp_d); c+="; expires="+expires.toGMTString() } if(path)c+="; path="+escape(path); if(domain)c+="; domain="+escape(domain); if(secure)c+="; secure"; document.cookie=c; } }; var __methods = { get:(t,m)=>m in t?t[m]:_cookie.get_cookie(m), set:(t,m,v)=>v?_cookie.set_cookie(m,v):_cookie.delete_cookie(m) }; var cookie = new Proxy(_cookie,__methods); 


Código comprimido:
 var _c={g:function(d){var c=document.cookie.match("(^|;) ?"+d+"=([^;]*)(;|$)");return c?unescape(c[2]):null},d:function(d){var c=new Date;c.setTime(c.getTime()-1),document.cookie=d+="=; expires="+c.toGMTString()},s:function(k,r,i,a,n,q,o,c){var e=k+"="+escape(r);i&&(e+="; expires="+new Date(i,a,n).toGMTString());q&&(e+="; path="+escape(q)),o&&(e+=";domain="+escape(o)),c&&(e+="; secure"),document.cookie=e}},cookie=new Proxy({get_cookie:_c.g,delete_cookie:_c.d,det_cookie:_c.s},{get:(d,c)=>c in d?d[c]:_c.g(c),set:(e,c,f)=>f?_c.s(c,f):_c.d(c)}); 


Por favor, amor y favor en los comentarios)

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


All Articles