Nous travaillons avec les cookies en tant que classe javascript

Bonjour à tous! Aujourd'hui, je veux considérer une question très populaire: comment travailler avec les cookies? Des méthodes très différentes sont proposées partout, mais laquelle est la meilleure? Il n'y a pas de réponse définitive à cette question, mais je veux offrir un moyen très pratique, et si vous êtes intéressé, bienvenue dans les castes.

Et donc, au point


Nous créons les méthodes get_cookie, set_cookie et delete_cookie:

Code
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; } } 

Eh bien, nous vérifions ces méthodes et, en principe, nous pouvons y mettre fin. Mais ce n'est pas ce que nous recherchons. Je voudrais faire quelque chose comme les propriétés c #.

Il existe une classe proxy très pratique pour cela en javascript.

En bref, le proxy «enveloppe» un autre objet et peut intercepter (et, si vous le souhaitez, traiter indépendamment) diverses actions avec lui, par exemple, lire / écrire des propriétés et autres.

Pour travailler avec des méthodes proxy, nous créons deux fonctions lambda:

Code
 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) } 


Maintenant, nous créons la classe Proxy elle-même, dont le premier paramètre est la liste des méthodes de la classe, nous la définissons sur _cookie, mais si vous n'avez pas besoin des méthodes de travail avec les cookies, spécifiez {}, le deuxième paramètre est le même __ méthode que nous venons de créer.

Très bien, il suffit maintenant d'écrire une simple ligne:

 var cookie = new Proxy(_cookie,__methods); 

Vive! nous avons créé une classe, en appelant (get) les propriétés dont la méthode __methods .get sera appelée et en lui affectant une valeur - __methods.set .

Exemple d'utilisation:

Code
 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); 


Code complet:
 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); 


Code compressé:
 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)}); 


S'il vous plaît aimer et favoriser dans les commentaires)

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


All Articles