使用用户提供的对象的属性(如果存在),否则使用默认值

时间:2012-03-21 02:05:56

标签: javascript object

所以我想说我想在JavaScript中将包含设置的对象传递给我的类,但也提供默认选项,我该如何轻松地做到这一点?例如:

myClass = function(options){
    var defaults = {
        foo: 'foo',
        bar: 'bar'
    };
};
customOptions = {
    bar: 'foobar'
};
myInstance = new myClass(customOptions);

因此,在这种情况下,我希望myInstance()使用foo='foo',因为它未由用户指定,而bar='foobar'则由用户设置。

现在,我将处理一个更大更复杂的JSON对象,显然,每次检查每个属性似乎效率低且难以维护,因此有一些方法可以轻松地组合这些对象,根据需要进行覆盖,用户提供的属性始终优先?

3 个答案:

答案 0 :(得分:2)

你可以这样做:

var MyClass = function (options) {
    var defaults = {foo: 1, bar: 2};

    for (var option in defaults) {
      this[option] = options[option] || defaults[option];           
    }
}

var customOptions = { bar: 5};
var c = new MyClass(customOptions);

基本上循环传入的自定义选项,并添加任何缺少的默认选项。在这种情况下c.foo = 1c.bar = 5。小提琴可在http://jsfiddle.net/2Ve3M/获得。

答案 1 :(得分:1)

您可以尝试这样的事情:

myClass = function(options){
    var myOptions = {
        foo: options.foo || 'foo',
        bar: options.bar || 'bar'
    };
};

如果您使用的是jQuery,还可以查看http://api.jquery.com/jQuery.extend/

答案 2 :(得分:1)

您可以检查自定义选项对象是否包含您要查找的属性,如果没有设置默认值。

myClass = function(options) {
    this.foo = options.foo || 'foo';
    this.bar = options.bar || 'bar';
};
customOptions = {
    bar: 'foobar'
};
myInstance = new myClass(customOptions);