Вопрос

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

for(var layer = 0; layer < hudLayers['layers'].length; layer++){

    // Store the to-be-calculated values in this object
    var tempValues = hudLayers['layers'][layer];

    tempValues['name'] = 'test';
}
.

Это изменит значение в TempValues и Hudlayers. (Кажется видом очевидным, но пост без немного кода кажется настолько голым.)

есть быстрый путь вокруг этого?

Это было полезно?

Решение

Это не пример прохождения посредством ссылки (вы не проходите никаких параметров). Тем не менее, вы правы;Присвоение объекта не сделает глубокую копию.

Вы можете сделать глубокую копию объекта, как это:

function deepCopy(obj) {
    if (typeof obj !== "object") return obj;
    if (obj.constructor === RegExp) return obj;

    var retVal = new obj.constructor();
    for (var key in obj) {
        if (!obj.hasOwnProperty(key)) continue;
        retVal[key] = deepCopy(obj[key]);
    }
    return retVal;
}
.

Обратите внимание, что если у конструктора объекта есть какие-либо побочные эффекты, этот код срабатывает их.

Другие советы

Нет передачи по ссылке в JavaScript.Объекты доступны через ссылки, и эти ссылки назначаются или передаются по значению, как в Java

Создание глубокой копии объекта так же просто, как objCopy = obj.toSource();.

.tosource на MDN

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top