【发布时间】:2019-04-02 01:36:31
【问题描述】:
创建一个对象并从函数中返回它是可行的。
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
我想做的是强制函数返回左值而不是右值。 以下也不起作用。
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]
}
【问题讨论】:
-
如果
returnObject()是一个函数,那么returnObj() = { yellow : 'house'}是无效的语法。赋值涉及变量(即var、let或const)、原语、数据类型等, -
data对象是否始终采用给定格式? -
另外,您的问题是什么?您是否正在尝试编写一个函数来通过
returnObj()将一个对象重新分配给一个新对象? -
@wentjun 我想是的。可能有解决方法,但无论如何,看到一种方法来执行以下操作会很有趣。
-
我相信这是相关的:stackoverflow.com/questions/3709866/… 这似乎不是函数返回引用还是值的问题,而是作为赋值运算符的一部分有效的是 javascript
标签: javascript javascript-objects lvalue