مرحبا بالجميع! أود اليوم التفكير في سؤال شائع للغاية: كيفية التعامل مع ملفات تعريف الارتباط؟ يتم تقديم طرق مختلفة للغاية في كل مكان ، ولكن أيهما أفضل؟ لا توجد إجابة محددة على هذا السؤال ، لكنني أرغب في تقديم طريقة مريحة للغاية ، وإذا كنت مهتمًا ، فمرحبًا بك في هذه الطوائف.
وهكذا ، إلى هذه النقطة
نحن نصنع أساليب get_cookie و set_cookie و delete_cookie:
قانون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; } }
حسنًا ، نحن نتحقق من هذه الأساليب ، ومن حيث المبدأ ، يمكننا إنهاء هذا. لكن هذا ليس ما نسعى إليه. أود أن أفعل شيئًا مثل الخصائص 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) }
الآن نقوم بإنشاء فئة
Proxy نفسها ، والمعلمة الأولى منها هي قائمة طرق الفصل ، وسنقوم بتعيينها على _cookie ، ولكن إذا لم تكن بحاجة إلى أساليب العمل مع ملفات تعريف الارتباط ، حدد {} ، والمعلمة الثانية هي نفس
__methods التي
أنشأناها للتو.
عظيم ، الآن فقط اكتب سطر بسيط:
var cookie = new Proxy(_cookie,__methods);
مرحى! أنشأنا فئة ، عند استدعاء (get) الخصائص التي ،
سيتم استدعاء طريقة
__methods .get ، وعند تعيين قيمة ،
__methods.set .
مثال للاستخدام:
قانون var name= prompt(" ","my_name"); var value= parseFloat(prompt(" ( float )","103")); cookie[name] = value; if(value<100) cookie[name]+=10; else cookie[name]-=10;
كود كامل: 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);
كود مضغوط: 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)});
يرجى الحب وصالح في التعليقات)