日期:2014-05-16  浏览次数:20342 次

求大神们赐教js cookie对象问题

  document.cookie = "basketBallStar=" + "Kobe";
  document.cookie = "footBallStar=" + "Messi";

  alert(typeof document.cookie);
  alert(document.cookie); 

此时document.cookie的type为String
那么第二次给document.cookie赋值的时候应该完全覆盖第一次赋值
也就是结果应该只有“footBallStar=Messi”啊
就像下面这:

  document.cookie = "basketBallStar=" + "Kobe";
  var cookie = document.cookie;
  cookie = "footBallStar=" + "Messi";
  alert(cookie );


为什么第一个代码片段最后的结果却是“basketBallStar=Kobe;footBallStar=Messi”
js?cookie?string

------解决方案--------------------
楼主楼主,我来给你解释!!



在C++中,有一种东西叫操作符重载,这里完全可以理解为赋值符号“=”被重载了。

好吧,你要是说这里是js,不用操作符重载的概念解释也ok。

在javascript 1.8版本中(不好意思,不知道是不是1.8,反正最新的就是),有一种东西叫属性的setter和getter,其中的setter就是用来处理属性的赋值操作的。

新版中,object可以写成这样:

var obj = {
  get a(){ return 1;},
  set a(){ }
};
console.log(a);


我们来构造一个和cookie属性一样神奇的属性。

var obj = (function(){
  var data = {};
  return {
    set cookie(c){
       c = c.split('=');
       if(c[0] && c[1]) {
          data[c[0]] = c[1];
       }
    },
    get cookie(){
       var r = [];
       for(var i in data) {
           r.push(i+'='+data[i]);
       }
       return r.join(';');
    }
  }
})();

obj.cookie = "sid=fdsafasf";
obj.cookie = "lang=zh-cn";
console.log(obj.cookie)://sid=fdsafasf;lang=zh-cn


这里只是简单的模仿了document.cookie的运作方法。
LZ的疑惑关键在于这个赋值号,其实这个符号和普通的变量的赋值不一样,它在引擎内部被重载了,实际运行了某个方法。

请在最新的chrome中测试以上代码。