求大神们赐教js cookie对象有关问题
求大神们赐教js cookie对象问题
此时document.cookie的type为String
那么第二次给document.cookie赋值的时候应该完全覆盖第一次赋值
也就是结果应该只有“footBallStar=Messi”啊
就像下面这:
为什么第一个代码片段最后的结果却是“basketBallStar=Kobe;footBallStar=Messi”
------解决方案--------------------
楼主楼主,我来给你解释!!

在C++中,有一种东西叫操作符重载,这里完全可以理解为赋值符号“=”被重载了。
好吧,你要是说这里是js,不用操作符重载的概念解释也ok。
在javascript 1.8版本中(不好意思,不知道是不是1.8,反正最新的就是),有一种东西叫属性的setter和getter,其中的setter就是用来处理属性的赋值操作的。
新版中,object可以写成这样:
我们来构造一个和cookie属性一样神奇的属性。
这里只是简单的模仿了document.cookie的运作方法。
LZ的疑惑关键在于这个赋值号,其实这个符号和普通的变量的赋值不一样,它在引擎内部被重载了,实际运行了某个方法。
请在最新的chrome中测试以上代码。
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中测试以上代码。