[转帖]Mootools源码分析-43 -- Hash.Cookie

it2022-05-11  59

原帖地址:http://space.flash8.net/space/?uid-18713-action-viewspace-itemid-409100

原作者:我佛山人

 

代码 // 以哈希表形式操作的Cookie类 // 因为Cookie的形式是字符串形式的键值对,所以可以跟哈希表数据相互转化 Hash.Cookie  =   new  Class({     // 继承自Cookie类     Extends: Cookie,    options: {         // 是否自动保存,为true时每次修改哈希表数据都会自动更新Cookie         autoSave:  true     },     // 构造函数     initialize:  function (name, options)    {         // 调用父类的构造函数,传递相同的参数          this .parent(name, options);         // 读取Cookie并解释为哈希表对象          this .load();    },     // 保存Cookie     save:  function ()    {         // 先将哈希数据转为字符串          var  value  =  JSON.encode( this .hash);         // 如果为空或者数据大小超过4K(Cookie的最大容量),取消保存          if  ( ! value  ||  value.length  >   4096 )     return   false // cookie would be truncated!          // 如果哈希表中没有数据,删除Cookie          if  (value  ==   ' {} ' )     this .dispose();         // 否则保存Cookie          else      this .write(value);         return   true ;    },     // 加载Cookie     load:  function ()    {         // 使用父类Cookie的read方法读取指定Cookie,再使用JSON.decode解释为哈希表数据          this .hash  =   new  Hash(JSON.decode( this .read(),  true ));         return   this ;    }}); // 为Hash.Cookie添加扩展实现(主要是针对autoSave参数的实现) // 原理是接管Hash的所有原型方法,加上包装,如果指定autoSave参数为true // 每次调用的时候自动调用save方法保存 Hash.Cookie.implement(( function ()    {     var  methods  =  {};     // 遍历Hash原型中的方法     Hash.each(Hash.prototype,  function (method, name)    {        methods[name]  =   function ()    {             // 因为原型中没有属性,所以这里能保证method都是方法,都具有apply方法              // 这时方法中的this指向Hash.Cookie实例的hash属性              var  value  =  method.apply( this .hash, arguments);             // 如果指定自动保存,则在每个跟Hash有关的方法调用时都会自动保存              if  ( this .options.autoSave)     this .save();             // 返回用于扩展实现的对象              return  methods;        };    });     return  methods;})()); 

 

转载于:https://www.cnblogs.com/maapaa/articles/mootools-s-43.html

相关资源:MooTools1.4中文PDF手册 MooTools-Core-1.5.1.js

最新回复(0)