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:
Codevar _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;
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)