cookie.js(设置名值对属性时候不支持设置成前后有空格的格式,如' key'或'key ',只支持‘key’)

  1. (function initCookieClass(win){// 定义匿名函数并在定以后立即调用(function(){}()),圆括号保证并正确解析成函数
  2. var Cookie=function Cookie(maxage,path){// Cookie构造函数
  3. // 私有属性,将document.cookie解析成JSON对象
  4. var cookie=(function(ck){
  5. var cookie={};
  6. var all=ck;
  7. if(all==='') return cookie; // 返回空值对象
  8. // document.cookie以key1=value1;key2=value2的格式存储数据
  9. var list=all.split(';');
  10. for (var i = 0; i < list.length; i++) {
  11. var c=list[i];
  12. var p=c.indexOf('=');
  13. var name=c.substring(0,p);
  14. // cookie存储中第一个名值对没有空格,第二个开始都有空格,做清除空格操作
  15. if(name && typeof name==='string') name=name.replace(/^\s|\s%/,'');
  16. var value=c.substring(p+1);
  17. // 对名值对进行解码,一般只要对值进行编解码,主要是对中文的处理
  18. name=decodeURIComponent(name);
  19. value=decodeURIComponent(value);
  20. cookie[name]=value;
  21. }
  22. return cookie;
  23. }(win.document.cookie));
  24. // 私有属性,keysSet
  25. var keys=[];
  26. for(var key in cookie) keys.push(key);
  27. // 自有属性,length表示cookie的对象数
  28. this.length=keys.length;
  29. // 实例方法,根据索引值返回cookie值,在根据长度遍历时候使用
  30. this.key=function(n){
  31. if(n<0||n>keys.length) return null;
  32. return cookie[n];
  33. };
  34. // 实例方法,根据key获取value
  35. this.getItem=function(name){
  36. return cookie[name]||null;
  37. };
  38. // 实例方法,设置cookie属性,以名值对的格式
  39. this.setItem=function(key,value){
  40. if(!key) {
  41. for(var k in value) {
  42. this.setItem(k, value[k]);
  43. }
  44. return;
  45. }
  46. if(!(key in cookie)) {
  47. keys.push(key);
  48. this.length++;
  49. }
  50. cookie[key]=value;
  51. var c=encodeURIComponent(key)+'='+encodeURIComponent(value);
  52. if(maxage) c+=';max-age='+maxage;
  53. if(path) c+=';path='+path;
  54. win.document.cookie=c;
  55. return this;
  56. };
  57. // 实例方法,根据key删除value
  58. this.removeItem=function(key){
  59. if(!(key in cookie)) return;
  60. delete cookie[key];
  61. for (var i = 0; i < keys.length; i++) {
  62. if(keys[i]===key) {
  63. keys.splice(i,1);
  64. break;
  65. }
  66. }
  67. this.length--;
  68. win.document.cookie=encodeURIComponent(key)+'=;max-age=0';
  69. return this;
  70. };
  71. // 实例方法,清除掉cookie数据和此对象数据
  72. this.clear=function(){
  73. for (var i = 0; i < keys.length; i++) {
  74. win.document.cookie=encodeURIComponent(keys[i])+'=;max-age=0';
  75. }
  76. cookie={};
  77. keys=[];
  78. this.length=0;
  79. return this;
  80. };
  81. // 实例方法,重新从浏览器中获取cookie数据
  82. this.sync=function(){
  83. cookie=(function(){
  84. var cookie={};
  85. var all=win.document.cookie;
  86. if(all==='') return cookie;
  87. var list=all.split(';');
  88. for (var i = 0; i < list.length; i++) {
  89. var c=list[i];
  90. var p=c.indexOf('=');
  91. var name=c.substring(0,p);
  92. if(name && typeof name==='string') name=name.replace(/^\s|\s%/,'');
  93. if(name) name=name.replace(/^\s|\s%/,'');
  94. var value=c.substring(p+1);
  95. name=decodeURIComponent(name);
  96. value=decodeURIComponent(value);
  97. cookie[name]=value;
  98. }
  99. return cookie;
  100. }());
  101. keys=[];
  102. for(var key in cookie) keys.push(key);
  103. this.length=keys.length;
  104. return this;
  105. };
  106. // 实例方法,返回cookie的JSON格式
  107. // 因为cookie是私有属性,在函数体闭包内用val声明的变量,在函数体外是无法直接访问的
  108. this.getCookieJSON=function(){
  109. return cookie;
  110. };
  111. };
  112. win.Cookie=Cookie;
  113. win.cookie=new Cookie();
  114. }(window));

cookie.html,简单测试一下

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Cookie Test</title>
  6. <script type="text/javascript" src="cookie.js"></script>
  7. <script type="text/javascript">
  8. (function(w){
  9. w.onload=function(){
  10. if(cookie) {
  11. // 增,改
  12. cookie.setItem('test','success');
  13. // 查
  14. var result=cookie.getItem('test');
  15. console.log('test:'+result);
  16. // 删
  17. cookie.removeItem('test');
  18. // 支持JSON格式的存储方案
  19. cookie.setItem(null,{'one':1,'two':2});
  20. // 根据JSON格式查找
  21. result=cookie.getCookieJSON();
  22. console.log('cookie for json:');
  23. for(var i in result) {
  24. console.log('\n'+i+':'+result[i]);
  25. }
  26. } else {
  27. throw new Error('Create cookie instance failure.');
  28. }
  29. };
  30. }(window));
  31. </script>
  32. </head>
  33. <body>
  34.  
  35. </body>
  36. </html>

默认cookie对象的生命周期是Web浏览器的会话期(session),与sessionStorage的作用域不同,cookie是整个浏览器进程,而不是单个窗口的进程。不同标签页可以共用,除非显示设置。

几乎所有的浏览器都支持cookie。

参考文献:《JavaScript权威指南》  --O‘REILLY[第六版]

cookie自封装对象的更多相关文章

  1. java中基本类型封装对象所占内存的大小(转)

    这是一个程序,java中没有现成的sizeof的实现,原因主要是java中的基本数据类型的大小都是固定的,所以看上去没有必要用sizeof这个关键字. 实现的想法是这样的:java.lang.Runt ...

  2. DES加密解密 与 Cookie的封装(C#与js互相加密解密)

    2D JS框架 - DES加密解密 与 Cookie的封装(C#与js互相加密解密)   这次实现了JS端的DES加密与解密,并且C#端也能正确解析DES的密文(反之也实现了) 使用的代码如下,非常方 ...

  3. 当使用cokie进行数据交互时候,cookie只需存储该对象的id即可不需要存放其他数据;只需在写个接口根据cookie里面的对象id来创建对象

    当使用cokie进行数据交互时候,cookie只需存储该对象的id即可不需要存放其他数据:只需在写个接口根据cookie里面的对象id来创建对象

  4. dbutils封装对象,单列,一行一列(用)

    基本用法:查找并封装对象与对象集合 public User findUserByNamePassword(String name,String password){ QueryRunner runne ...

  5. javascript jquery封装对象时的错误,求解!我想知道为什么

    jquery   封装对象时的错误 --------------------------------------------<input id="name" name=&qu ...

  6. day17-Python运维开发基础(类的封装 / 对象和类的相关操作、构造方法)

    1. 类的封装及相关操作 # ### oop 面向对象程序开发 """ #用几大特征表达一类事物称为一个类,类更像是一张图纸,表达的是一个抽象概念 "" ...

  7. ArrayList集合存储VO封装对象后调用的问题

    VO代码: public class VO4Blog { private int b_id; private int b_typeid; private String b_title; private ...

  8. JavaScript基础原始数据类型的封装对象(013)

    JavaScript提供了5种原始数据类型:number, string, boolean, null, and undefined.对于前面3个,即number, string, 和boolean提 ...

  9. day22:面向对象封装对象操作&类操作&面向对象删除操作

    面向对象程序开发 1.类的三种定义方式 class MyClass: pass class MyClass(): #(推荐) pass class MyClass(object): # object类 ...

随机推荐

  1. Crontab 计划任务

    有一部分工作,需要某个时间开始,每天执行,每间断一段时间执行.这个时候就需要了crontab.crontab 管理着linux上一些定期的任务.log rotate,logwatch 等等废话不多说来 ...

  2. Spring4分别整合mongo2.X和3.0

    1.pom文件添加: <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-jav ...

  3. java学习笔记 (6) —— 文件上传

    1.新建upload.jsp <%@ page language="java" import="java.util.*" pageEncoding=&qu ...

  4. JS原型的剖析与理解

    原型相关的概念 关于面向对象的概念 类 class 在js中就是构造函数 在传统的面向对象语言中,使用一个叫类的东西定义模版,然后使用模版创建对象 在构造方法中也具有类似的功能,因此称其为类 实例与对 ...

  5. HTML&CSS基础学习笔记1.4-定义文档类型

    Web 世界中存在许多不同的文档.只有了解文档的类型,浏览器才能正确地显示文档. HTML 也有多个不同的版本,只有完全明白页面中使用的确切 HTML 版本,浏览器才能完全正确地显示出 HTML 页面 ...

  6. ural 1586. Threeprime Numbers

    这道题看着别人的代码写的. #include <cstdio> #include <cstring> #define m 1000000009 using namespace ...

  7. zabbix 添加自定义key

    vim /etc/zabbix/zabbix_agentd.conf UserParameter=zjzc.login,/bin/sh /usr/sbin/get_login.sh UserParam ...

  8. CH Round #53 -GCD Path

    描述 给定一张N个点的有向图,点i到点j有一条长度为 i/(gcd(i,j))的边.有Q个询问,每个询问包含两个数x和y,求x到y的最短距离. 输入格式 第一行包含两个用空格隔开的整数,N和Q. 接下 ...

  9. [VBA]发布一个计算桩号之差的Excel自定义函数(VBA)

    这是一个可以计算桩号之差(也就是得到长度)的Excel(或WPS)扩展函数,可以减少工程师在统计工程量时的工作量. 该函数具有一定的通用性.可以在MS Office和金山WPS上使用. 文末会给出使用 ...

  10. poj2689:素数筛

    题目大意,给定l和u,求区间[l,u]内的素数中,相邻两个差最大和最小的素数其中 u的范围达到了2e9本质上需要找出n以内的所有素数,使用筛法.先保存50000(大于sqrt(2e9))内的所有素数, ...