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