使用面向对象思想处理cookie
实例:使用面向对象思想处理cookie
如果读者对cookie 不熟悉,可以在第七章学习它的使用方法,虽然在那里创建了几个
通用函数用于cookie 的处理,但这些函数彼此分离,没有体现出是一个整体。联想到
JavaScript中Math对象的功能,它其实就是通过Math这个全局对象,把所有的数学计算相
关的常量和方法都联系到一起,作为一个整体使用,提高了封装性和使用效率。现在对cookie
的处理事实上也可以按照这种方法来进行。
6.9.1 需求分析
对于cookie 的处理,事实上只是封装一些方法,每个对象不会有状态,所以不需要创
建一个cookie 处理类,而只用一个全局对象来联系这些cookie 操作。对象名可以理解为命
名空间。下面考虑cookie操作有哪些经常的操作:
(1)设置cookie包括了添加和修改功能,事实上如果原有cookie名称已经存在,那么
添加此cookie 就相当于修改了此cookie。在设置cookie 的时候可能还会有一些可选项,用
于指定cookie 的声明周期、访问路径以及访问域。为了让cookie 中能够存储中文,该方法
中还需要对存储的值进行编码。
(2)删除一个cookie,删除cookie只需将一个cookie的过期事件设置为过去的一个时
间即可,它接收一个cookie的名称为参数,从而删除此cookie。
(3)取一个cookie的值,该方法接收cookie名称为参数,返回该cookie的值。因为在
存储该值的时候已经进行了编码,所以取值时应该能自动解码,然后返回。
针对这些需求,下一小节将实现这些功能。
6.9.2 创建Cookie对象
因为是作为类名或者命名空间的作用,所以和Math对象类似,这里使用Cookie来表示
该对象:
var Cookie=new Object();
6.9.3 实现设置Cookie的方法
方法原型为:setCookie(name,value,option);其中name 是要设置cookie的名称;value是
设置cookie的值;option包括了其他选项,是一个对象作为参数。其实现如下:
Cookie.setCookie=function(name,value,option){
//用于存储赋值给document.cookie的cookie格式字符串
var str=name+"="+escape(value);
if(option){
//如果设置了过期时间
if(option.expireDays){
var date=new Date();
var ms=option.expireDays*24*3600*1000;
date.setTime(date.getTime()+ms);
str+="; expires="+date.toGMTString();
}
if(option.path)str+="; path="+path; //设置访问路径
if(option.domain)str+="; domain"+domain; //设置访问主机
if(option.secure)str+="; true"; //设置安全性
}
document.cookie=str;
}
6.9.4 实现取Cookie 值的方法
方法原型为:getCookie(name);其中name 是指定cookie的名称,从而根据名称返回相应
的值。实现如下:
Cookie.getCookie=function(name){
var cookieArray=document.cookie.split("; "); //得到分割的cookie名值对
var cookie=new Object();
for(var i=0;i<cookieArray.length;i++){
var arr=cookieArray[i].split("="); //将名和值分开
if(arr[0]==name)return unescape(arr[1]); //如果是指定的cookie,则返回它的值
}
return "";
}
6.9.5 实现删除Cookie的方法
方法原型为:deleteCookie(name);其中name 是指定cookie 的名称,从而根据这个名称
删除相应的cookie。在本实现中,删除cookie是通过调用setCookie来完成的,将option的
expireDays属性指定为负数即可:
Cookie.deleteCookie=function(name){
this.setCookie(name,"",{expireDays:-1}); //将过期时间设置为过去来删除一个cookie
}
通过上面的代码,整个Cookie对象就创建完毕,也可以将其放到一个大括号中来定义,
例如:
var Cookie={
setCookie:function(){},
getCookie:function(){},
deleteCookie:function(){}
}
通过这种形式,可以让Cookie 的功能更加清晰,它作为一个全局对象,大大方便了对
Cookie的操作,例如:
Cookie.setCookie(“user”,”jack”);
alert(Cookie.getCookie(“user”));
Cookie.deleteCookie(“user”);
alert(Cookie.getCookie(“user”));
上面的代码就先建立了一个名为user 的cookie,然后删除了该cookie。两次alert 输出
语句显示了执行的效果。
本节通过建立一个Cookie 对象来处理cookie,方便了操作,也体现了面向对象的编程
思想:把相关的功能封装在一个对象中。考虑到JavaScript语言的特点,本章没有选择需要
创建类的面向对象编程的例子,那和一般面向对象语言没有大的不同。而是以JavaScript中
可以直接创建对象为特点介绍了Cookie对象的实现及其工作原理。事实上这也和JavaScript
内部对象Math的工作原理是类似的。
var Cookie=new Object();
Cookie={
setCookie:function(name,value,option){
//用于存储赋值给document.cookie的cookie格式字符串
var str=name+"="+escape(value);
if(option){
//如果设置了过期时间
if(option.expireDays){
var date=new Date();
var ms=option.expireDays*24*3600*1000;
date.setTime(date.getTime()+ms);
str+="; expires="+date.toGMTString();
}
if(option.path)str+="; path="+path; //设置访问路径
if(option.domain)str+="; domain"+domain; //设置访问主机
if(option.secure)str+="; true"; //设置安全性
}
document.cookie=str;
},
getCookie:function(name){
var cookieArray=document.cookie.split("; "); //得到分割的cookie名值对
var cookie=new Object();
for(var i=0;i<cookieArray.length;i++){
var arr=cookieArray[i].split("="); //将名和值分开
if(arr[0]==name){
//如果是指定的cookie,则返回它的值
return unescape(arr[1]);
}
}
return "";
},
deleteCookie:function(name){
this.setCookie(name,"",{expireDays:-1}); //将过期时间设置为过去来删除一个cookie
}
}
使用面向对象思想处理cookie的更多相关文章
- java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述
在之前的java 23 中,了解过设计模式的单例模式和工厂模式.在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设 ...
- linux设备驱动归纳总结(八):3.设备管理的分层与面向对象思想【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-110738.html linux设备驱动归纳总结(八):3.设备管理的分层与面向对象思想 xxxxxx ...
- linux设备驱动归纳总结(三):3.设备驱动面向对象思想和lseek的实现【转】
本文转自自:http://blog.chinaunix.net/uid-25014876-id-59418.html linux设备驱动归纳总结(三):3.设备驱动面向对象思想和lseek的实现 一. ...
- 【重走Android之路】【Java面向对象基础(三)】面向对象思想
[重走Android之路][基础篇(三)][Java面向对象基础]面向对象思想 1 面向对象的WWH 1.1 What--什么是面向对象 首先,要理解“对象”.在Thinkin ...
- 原生JS面向对象思想封装轮播图组件
原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...
- c语言里用结构体和指针函数实现面向对象思想
一.基础研究 观察如下两个程序a.c和b.c: A.c: B.c: 这两个程序都是要实现在屏幕上第10行40列打印一个绿色的字符c: 这两个程序的数据组织方式是一样的,都是使用结构体,而且对共性和个性 ...
- C#基础知识-面向对象思想之继承(八)
上一篇的标题编程思想我觉得不是很符合主题,因为编程思想的范围太大了,不仅仅是封装 继承 多态,所以比较符合主题的应该是面向对象思想.这一篇中将继续叙述面向对象思想中的继承. 从字面来看继承表达的意思已 ...
- 谈一谈原生JS中的【面向对象思想】
[重点提前说:面向对象的思想很重要!] 最近开始接触学习后台的PHP语言,在接触到PHP中的面向对象相关思想之后,突然想到之前曾接触的JS中的面向对象思想,无奈记性太差, ...
- JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块
JAVA之旅(四)--面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块 加油吧,节奏得快点了 1.概述 上篇幅也是讲了这点,这篇幅就着重的讲一下思想和案例 就拿买 ...
随机推荐
- Python命名规范
Python 标识符 参见:https://docs.python.org/3/reference/lexical_analysis.html?highlight=identifier#identif ...
- 【Tsinghua OJ】范围查询(Range)问题
[问题描述]数轴上有n个点,对于任一闭区间 [a, b],试计算落在其内的点数. [输入]第一行包括两个整数:点的总数n,查询的次数m.第二行包含n个数,为各个点的坐标.以下m行,各包含两个整数:查询 ...
- 7、网页制作Dreamweaver(悬浮动态分层导航)
悬浮动态分层导航的制作: 1.首先在<head>里面引用一个JQUERY的文件以用来制作鼠标点击动画效果(从网站上下载即可) <script language="javas ...
- How to install more voices to Windows Speech?
!!!WARNING!!! This involves manual edits to your registry. If you mess it up, don't blame me. Do at ...
- hadoop shell 详解
概述 所有的hadoop命令均由bin/hadoop脚本引发.不指定参数运行hadoop脚本会打印所有命令的描述. 用法: hadoop [--config confdir] [COMMAND] ...
- ubuntu 状态栏不显示时间
有时候我们会看到我们电脑的状态栏那里并没有显示时间,一个原因是日期时间指示器没有工作,另一个可能的原因是用户禁用了时间显示. 方法一: 首先我们用下面的命令来确认一下是否安装了日期时间指示器: sud ...
- Sprint第二个冲刺(第六天)
一.Sprint 计划会议: 因为这两天课程较多的原因,表面上进度可能可能没有太大的变化,其实组员们都有完善之前做的功能,正在做的功能也在抓紧时间完成.俗话说得好,慢工出细活 ,不能因为赶进度就随便做 ...
- SQL编写
//用户表,用户ID,用户名称create table t_user (user_id int,username varchar(20));//用户帐户表,用户ID,用户余额(单位分)create t ...
- 横向滚动条展示 css
<div class="shuaixuan" style="overflow:hidden;"> <div style="ov ...
- lable自动适配大小
#import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...