创建对象并从函数返回它。
var obj = {
color : 'green'
}
function returnObj(){
return obj
}
console.log(JSON.stringify(obj))
>>>{color : 'green'}
以这种方式添加新的键值对有效。 返回值(例如对象或数组)的条目是引用。
returnObj().size = "big"
console.log(JSON.stringify(obj))
>>>{color : 'green', size : 'big'}
将其重新分配给新对象无效。
returnObj() = { yellow : 'house'}
>>> ReferenceError: Invalid left-hand side in assignment
我要执行的是强制该函数返回l值而不是r值。 以下内容也不起作用。
returnObj().this = { yellow : 'house'}
console.log(JSON.stringify(obj))
>>>{"color":"green","size":"big","this":{"yellow":"house"}}
这样做的原因是,根据用户设置,有不同的对象要引用。
var data = {
house: {color: 'green'}
car : {speed: "fast"},
}
var setting = 'house'
function returnDataObj(){
return obj[setting]
}
答案 0 :(得分:0)
您不能以这种方式为函数分配值。您应该将参数传递给函数(returnObj) 例如
var obj = {
color : 'green'
}
function returnObj(key , value){
obj[key] = value;
return obj;
}
obj = returnObj("size","big");
console.log(JSON.stringify(obj))
答案 1 :(得分:0)
函数返回总是返回一个值而不是引用。 对象条目和数组条目是该值内的引用。
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]];
}