Функция return всегда возвращает значение, а не ссылку.
Записи объекта и записи массива являются ссылками внутри этого значения.
var obj = { color : 'green' }
var reference_to_obj = obj
reference_to_obj.color = 'red'
console.log(obj.color)
>>>red
function return_obj(){return obj}
return_obj().color = "blue"
console.log(obj.color)
>>>blue
все три ссылаются на один и тот же объект-контент
но пока мы можем переназначить имя "reference_to_obj" на другое значение
reference_to_obj = 'string'
функция return_obj () ведет себя как анонимная ссылка на объект.
Знает только содержимое объекта / массива, но не знает имя переменной, под которой оно было сохранено.
return_obj() = {} //is similar to
AnonymousReference_1231kf10h1kf1 = {} // pseudocode for illustration
Обходные:
1.Сохранить динамическую ссылку в переменной. К сожалению, вы должны помнить, чтобы вызывать функцию обновления, когда ссылка должна измениться
var objectReference;
function updateObjectReference(){
objectReference = obj[setting]
}
2. Внутренняя вложенность: один слой глубже
var obj = {content : {color: green}}
returnObj().content = {size: big}
3.Наружное размещение: окно глобального объекта.
window[returnObjectNameString()]={size: big}
4. Функция возвращает объект, но также может заменить его.
function returnObj(replacementObj){
if(typeof replacementObj !== 'undefined'){ obj = replacementObj }
return obj
}
5. Удалить все значения и назначить новые. Примечание: он останется объектом.
var props = Object.keys(returnObj());
for (var i = 0; i < props.length; i++) {
delete returnObj()[props[i]];
}