Javascript 如何在外部变量更改时更新对象属性

Javascript 如何在外部变量更改时更新对象属性,javascript,Javascript,我再一次在Javascript中遇到了一个我不理解的行为。一旦对象外部的变量发生变化,我就需要更新对象的属性。外部变量在对象属性中引用,因此我认为我所要做的就是从外部更改变量,并自动更改属性值 下面是代码的简化版本: var serverPath = "123/"; var GetCurrentProductionApiConfig = { URL: { GetStart: serverPath + 'GetCurrentProduction?returnValue=start&a

我再一次在Javascript中遇到了一个我不理解的行为。一旦对象外部的变量发生变化,我就需要更新对象的属性。外部变量在对象属性中引用,因此我认为我所要做的就是从外部更改变量,并自动更改属性值

下面是代码的简化版本:

var serverPath = "123/";

var GetCurrentProductionApiConfig = {
  URL: {
    GetStart: serverPath + 'GetCurrentProduction?returnValue=start&',
    GetEnd: serverPath + 'GetCurrentProduction?returnValue=end&',
    Get: serverPath + 'GetCurrentProduction?returnValue=start&'
  }
};

serverPath = "456/";

console.log(GetCurrentProductionApiConfig.URL.GetStart);
这将导致:

123/GetCurrentProduction?返回值=开始&

是因为变量已被复制(按值传递)而不是有指针(按引用传递)吗?更新属性的正确方法是什么?

然而,对象的值恰好是它的引用。但是,这里重要的一点是,对于原语,当引用变量发生更改时,将不会得到更改:

var a=“世界”;
var obj={
b:“你好”+a//
}
a=“宇宙”//不修改引用a的对象b

控制台日志(obj.b)//helloworld
JS中没有pass-by引用,所有内容都是pass-by-value。但是,对象的值是它的引用。基本体的值是直线基本体。因此,您不能基于原语动态地重新计算内容,例如,
a=1;b=2+a;a=4
不会改变
b
。字符串也一样。你可以有动态属性,但这是一个奇特的功能。@VLAZ谢谢你的信息。传递到函数中的AFAIK对象变量将是对外部对象的引用,而不是对象的副本,因此至少有类似“通过引用传递”的内容。您将如何解决上述问题?使用原型函数扩展对象以更新属性?同样,对象的值是其引用。所以JS总是按值传递,即使对于对象也是如此。但是,如果您希望获得最新的值,那么您可以使您的属性实际成为方法,因此每次执行它们时,它们都会重新计算返回值。你可以使用一个相同的东西隐藏它,但它对于使用代码
obj是透明的。dynamicValue
实际上将执行一个函数,而不是读取静态属性。同样相关:@VLAZ非常感谢你的解释,尤其是链接的,所以看起来很有希望。如果你能从你的评论中找到答案,我会接受这个解决方案。