有任何想法如何制作JSON
- 可用小写,大写, camelCase , PerlCase 和连字符。我们有类似这个对象符号的东西,用camelCase声明:
var options = {
"fooBar": "foo bar"
};
但是,如果用户使用连字符或类似语句声明默认值,那该怎么办:
var options = {
"foo-bar": "foo bar"
};
如何只用一把钥匙就可以访问它们。
例如, jQuery可以使用连字符和camelCase访问$.fn.css
和$.fn.animate
中的键
有没有办法解决这个问题?
答案 0 :(得分:0)
我做了一些东西,但并不完美,但到目前为止它仍然有效:
(function(){
var methods = {
toLowerCase: function(str){
return str.toLowerCase();
},
toUpperCase: function(str){
return str.toUpperCase();
},
toCamelCase: function(str){
return str.replace(/(\-[a-z])/g, function($1){
return $1.toUpperCase().replace("-", "");
});
},
toDashCase: function(str){
return str.replace(/([A-Z])/g, function($1){
return "-"+$1.toLowerCase();
});
}
};
Object.prototype.getItem = function(key) {
var opt = this[key];
if(opt) return opt;
for(var method in methods) {
if(methods.hasOwnProperty(method)) {
opt = this[ methods[method](key) ];
if(opt) return opt;
}
}
};
}());
我使用Object.prototype
来使用非常简单:
var options = {
"foo": "foo",
"BAR": "BAR",
"fooBar": "fooBar",
"bar-foo": "bar-foo"
};
console.log(
options.getItem("foo"), // "foo"
options.getItem("Foo"), // "foo"
options.getItem("FOO"), // "foo"
options.getItem("bar"), // "BAR"
options.getItem("bar"), // "BAR"
options.getItem("BAR"), // "BAR"
options.getItem("fooBar"), // "fooBar"
options.getItem("foo-bar"), // "fooBar"
options.getItem("barFoo"), // "bar-foo"
options.getItem("bar-foo") // "bar-foo"
);
不完美,但愿意接受任何改进。