Kami bekerja dengan cookie sebagai kelas javascript

Halo semuanya! Hari ini saya ingin mempertimbangkan pertanyaan yang sangat populer: bagaimana cara bekerja dengan cookie? Metode yang sangat berbeda ditawarkan di mana-mana, tetapi mana yang lebih baik? Tidak ada jawaban pasti untuk pertanyaan ini, tetapi saya ingin menawarkan cara yang sangat nyaman, dan jika Anda tertarik, selamat datang di kasta.

Jadi, to the point


Kami membuat metode get_cookie, set_cookie, dan delete_cookie:

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

Kami memeriksa metode ini, dan pada prinsipnya, kami bisa mengakhiri ini. Tapi ini bukan yang kita perjuangkan. Saya ingin melakukan sesuatu seperti properti c #.

Ada kelas proxy yang sangat nyaman untuk ini dalam javascript.

Singkatnya, Proxy "membungkus" objek lain dan dapat mencegat (dan, jika diinginkan, memproses secara independen) berbagai tindakan dengannya, misalnya, membaca / menulis properti dan lainnya.

Untuk bekerja dengan metode proxy, kami membuat dua fungsi lambda:

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


Sekarang kita membuat kelas Proxy sendiri, parameter pertama yang merupakan daftar metode kelas, kita akan mengaturnya ke _cookie, tetapi jika Anda tidak memerlukan metode bekerja dengan cookie, tentukan {}, parameter kedua adalah __methods yang sama yang baru saja kita buat.

Hebat, sekarang hanya menulis baris sederhana:

 var cookie = new Proxy(_cookie,__methods); 

Hore! kami menciptakan sebuah kelas, dengan memanggil (mendapatkan) properti yang akan dipanggil oleh metode __methods. get , dan dengan menetapkan nilai untuknya - __methods.set .

Contoh penggunaan:

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


Kode lengkap:
 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); 


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


Tolong cintai dan nikmat dalam komentar)

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


All Articles