Показать сообщение отдельно
  #2 (permalink)  
Старый 01.12.2014, 12:11
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Проще всего через наследование. Просто кладете дефолтный объект в прототип и пихаете свои значения сверху.
Второй способ - рекурсивно.

//Тестовые данные
var defaults = {
    test1: true,
    test2: true,
    test3: {
        "test3.1": true,
        "test3.2": true
    }
};

var params = {
    test2: false,
    test3: {
        "test3.2": false
    }
};

//Сама маржилка
var result = (function (defaults, param) {

    var obj = Object.create(defaults);

    var merge = function (result, params) {
        for (var key in params) {
            if (params.hasOwnProperty(key)) {

                if (key in result && typeof params[key] == "object" && typeof result[key] == "object") {
                    merge(result[key], params[key])
                } else {
                    result[key] = params[key];
                }

            }
        }
    };

    merge(obj, params);

    return obj;

})(defaults, params);

//проверяем
alert(result.test1);
alert(result.test2);
alert(result.test3["test3.1"]);
alert(result.test3["test3.2"]);

Последний раз редактировалось tsigel, 01.12.2014 в 12:48.
Ответить с цитированием