Wir arbeiten mit Cookies als Javascript-Klasse

Hallo allerseits! Heute möchte ich eine sehr beliebte Frage betrachten: Wie arbeite ich mit Cookies? Überall werden sehr unterschiedliche Methoden angeboten, aber welche ist besser? Es gibt keine eindeutige Antwort auf diese Frage, aber ich möchte einen sehr bequemen Weg anbieten, und wenn Sie interessiert sind, begrüßen Sie die Kasten.

Und so auf den Punkt


Wir machen die Methoden get_cookie, set_cookie und 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; } } 

Nun, wir überprüfen diese Methoden und können dies im Prinzip beenden. Aber das ist nicht das, wonach wir streben. Ich möchte so etwas wie Eigenschaften c # tun.

Hierfür gibt es in Javascript eine sehr praktische Proxy- Klasse.

Kurz gesagt, Proxy "umschließt" ein anderes Objekt und kann damit verschiedene Aktionen abfangen (und, falls gewünscht, unabhängig verarbeiten), z. B. Lese- / Schreibeigenschaften und andere.

Um mit Proxy-Methoden zu arbeiten, erstellen wir zwei Lambda-Funktionen:

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


Jetzt erstellen wir die Proxy- Klasse selbst, deren erster Parameter die Liste der Methoden der Klasse ist. Wir setzen sie auf _cookie. Wenn Sie jedoch die Methoden zum Arbeiten mit Cookies nicht benötigen, geben Sie {} an. Der zweite Parameter entspricht den gerade erstellten __methods .

Großartig, jetzt schreibe einfach eine einfache Zeile:

 var cookie = new Proxy(_cookie,__methods); 

Hurra! Wir haben eine Klasse erstellt, indem wir die Eigenschaften aufgerufen (get) haben, deren Methode die Methode __methods .get aufgerufen wird, und indem wir ihr einen Wert zugewiesen haben - __methods.set .

Anwendungsbeispiel:

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


Vollständiger 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; } }; 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); 


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


Bitte lieben und bevorzugen Sie in den Kommentaren)

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


All Articles