Создание конфига для функции в JavaScript - PullRequest
3 голосов
/ 27 мая 2011

Я хочу, чтобы мой класс JavaScript настраивался извне.Итак, я создал частный config -свойство и loadConfig -метод.Моя проблема в том, что когда я загружаю конфигурацию, она полностью перезаписывает свойство конфигурации, а не только свойства, которые я определил.

(function() {
var config = {
    param: value,
    group: {
        groupParam: value
    }
};
function MyClass() {
    this.loadConfig = function(loadConfig) {
        if (typepof loadConfig == "undefined" || typeof loadConfig == "null")
            return;
        else
            config = loadConfig;
    };  
}
window.MyClass = new MyClass();
})();

При загрузке пользовательской конфигурации

<script type="text/javascript">
    var config = {
        group: {
            groupParam: "newValue"
        }
    };

    MyClass.loadConfig(config);
</script>

Я хочу, чтобы config.param по-прежнему был "значением", а config.group.groupParam - "новым значением".

В настоящее время объект перезаписывается и после loadConfig(), config.param больше не существует.

Ответы [ 2 ]

3 голосов
/ 27 мая 2011

Если вы не хотите заново изобретать колесо, в jQuery есть отличная функция под названием $.extend(), которая, кажется, вам нужна.

Вы можете проверить это в jQuery 1.6.1 source например ( Ctrl + F и "extension" => давно, так как я ждал, чтобы использовать эти вещи с клавиатуройодин раз :)).

1 голос
/ 27 мая 2011

Он перезаписан, потому что вы говорите перезаписать эту строку в вашем loadConfig методе:

config = loadConfig;

Чтобы сохранить любые значения, которые loadConfig не изменяются в явном виде, вам придется просмотреть все свойства в loadConfig и назначить их индивидуально:

this.loadConfig = function (loadConfig) {
    if (typeof loadConfig == "undefined" || typeof loadConfig == "null") {
        return;
    } else {
        var x;
        for (x in loadConfig) {
            if (Object.prototype.hasOwnProperty.call(loadConfig, x)) {
                config[x] = loadConfig[x];
            }
        }
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...