我发现我自己经常从 JavaScript 中所谓的名称值列表中解析值。
我使用了一个自制的功能,它做得很好,但是我决定尝试原型属性。它似乎有效,但是我发现第二个函数“nvlSet”有点“丑陋”。
你认为是吗?如果是这样,你认为它如何能变成一种更“优雅”的方式来完成这项工作。
if(!String.prototype.nvlGet) {
String.prototype.nvlGet = function(nme,def){
return((rem0=new RegExp('(\\b|,)' + nme + '=([^\\b][^,]*)').exec(this)) ? rem0[2] : def);
}
}
if(!String.prototype.nvlSet) {
String.prototype.nvlSet = function(nme,val){
var re0=new RegExp('(\\b' + nme + '=[^\\b][^,]*)');
if(re0.test(this)) return(this.replace(re0,nme + "=" + val));
re0.compile('(,' + nme + '=[^\\b][^,]*)');
return(this.replace(re0,',' + nme + "=" + val));
}
}
var lst='firstName=John,lastName=Smith,department=Sales';
alert(lst.nvlGet('firstName')); // John
alert(lst.nvlGet('surName','none')); // none
lst=lst.nvlSet('department','Research');
alert(lst.nvlGet('department','unknown')); // Research
alert(lst); // firstName=John,lastName=Smith,department=Research
另外,我想避免像这里的“双重分配”:
lst=lst.nvlSet('department','Research');
对于这样的事情:
lst.nvlSet('department','Research');
但是我找不到办法做到这一点。