Используйте свойства предоставленного пользователем объекта, если он существует, в противном случае используйте значения по умолчанию - PullRequest
3 голосов
/ 21 марта 2012

Итак, допустим, я хочу передать объект, содержащий настройки, моему классу в JavaScript, но также предоставить параметры по умолчанию, как бы мне это было легко сделать?Например:

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

Так что в этом случае я бы хотел, чтобы myInstance() использовал foo='foo', так как он не был указан пользователем, и bar='foobar', как это было установлено пользователем.

Теперь я, разумеется, буду иметь дело с более крупным и сложным объектом JSON, и кажется, что каждый раз проверять каждое свойство неэффективно и сложно, поэтому есть какой-то способ легко объединить эти объекты,при необходимости перезаписывать, а пользовательские свойства всегда имеют приоритет?

Ответы [ 3 ]

2 голосов
/ 21 марта 2012

Вы можете сделать что-то вроде этого:

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 = 1 и c.bar = 5. Скрипка доступна на http://jsfiddle.net/2Ve3M/.

1 голос
/ 21 марта 2012

Вы можете проверить, содержит ли объект пользовательских опций свойства, которые вы ищете, и если не заданы значения по умолчанию.

myClass = function(options) {
    this.foo = options.foo || 'foo';
    this.bar = options.bar || 'bar';
};
customOptions = {
    bar: 'foobar'
};
myInstance = new myClass(customOptions);
1 голос
/ 21 марта 2012

Вы можете попробовать что-то вроде этого:

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

Если вы используете jQuery, вы также можете посмотреть на http://api.jquery.com/jQuery.extend/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...