Jquery 通过camelCase和连字符使选项可访问

Jquery 通过camelCase和连字符使选项可访问,jquery,jquery-plugins,naming-conventions,naming,Jquery,Jquery Plugins,Naming Conventions,Naming,如何使用小写、大写、camelCase、PerlCase和连字符提供JSON-键。我们有这样的对象表示法,它是用camelCase声明的: var options = { "fooBar": "foo bar" }; 但是,如果用户使用连字符或类似字符声明默认值,该怎么办 var options = { "foo-bar": "foo bar" }; 如何访问它们,然后只需一个键 例如,使用连字符和camelCase可访问$.fn.css和$.fn.animate中的关键点

如何使用小写大写camelCasePerlCase连字符提供
JSON
-键。我们有这样的对象表示法,它是用camelCase声明的:

var options = {
    "fooBar": "foo bar"
};
但是,如果用户使用连字符或类似字符声明默认值,该怎么办

var options = {
    "foo-bar": "foo bar"
};
如何访问它们,然后只需一个键

例如,使用连字符和camelCase可访问
$.fn.css
$.fn.animate
中的关键点


已经有这样的方法了吗

我做了一些东西,虽然不完美,但到目前为止仍然有效:

(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"
);
不是十全十美的,但可以进行任何改进