大家好! 今天,我想考虑一个非常受欢迎的问题:如何使用Cookie? 到处都有非常不同的方法,但是哪种方法更好? 这个问题没有确切的答案,但是我想提供一种非常方便的方法,如果您有兴趣,欢迎来到种姓。
所以,到这一点
我们制作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#这样的属性。
javascript中有一个非常方便的
代理类。
简而言之,
代理可以 “环绕”另一个对象,并且可以拦截(并根据需要独立处理)与其有关的各种操作,例如,读取/写入属性等。
为了使用代理方法,我们创建了两个lambda函数:
代号 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,但是如果您不需要使用cookie的方法,请指定{},第二个参数与我们刚创建的
__method相同。
太好了,现在只需写一条简单的代码:
var cookie = new Proxy(_cookie,__methods);
万岁! 我们通过调用(获取)将被调用
__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)});
请在评论中表示爱意和支持)