Да, пример выше глюкавый по некоторым причинам, ниже проверенный в работе
var Get=(function(){
var qd = {}, qs={};
for(var s=location.search.substr(1).split('&'),i=0;item=s[i];i++)
qd[item.split('=')[0]]=decodeURIComponent(item.split('=')[1]);
return {
set:function(k,v){
qs[k]=v;
return this;
},
get:function(k){
return (k in qd)?qd[k]:null;
},
toString:function(){
var k,res=[];
for(k in qs)
qd[k]=qs[k];
for(k in qd)
if(qd[k]!==null)
res.push(k+'='+encodeURIComponent(qd[k]));
return res.join('&');
},
ass:function(){
location.search=this.toString();
},
rm:function(){
qs={};
},
qd:qd
};
})();
ass это сокр от assign, а rm - сокр от remove
Следующий вопрос - как делаются геттеры и сеттеры у таких объектов? У меня даже toString() походу не фурычит, хоть это и не актуально в js, а вот геттер-сеттер было бы полезно, если, конечно, там не туча кода.