更新参考变量

时间:2017-04-26 07:37:48

标签: javascript angular typescript reference

只是想知道如果变量是字符串,是否可以更新对象引用变量?它可以工作,如果我分配整个对象,但不能使用字符串。我也可以分配整个对象,但问题是我不需要一个对象,但我需要一个字符串,因为它是Angular 2服务的全局变量。

https://jsfiddle.net/009kqqrt/

obj = { var: 'initial' };
a = [{ test: 'old', new: 'no' }, { test: obj.var, new: 'yes' }];
o = { test: obj.var, new: 'yes' };

obj.var = 'objModified';

alert(o.test); // Changes correctly

obj.var = 'arrModified';

alert(a[1].test);

这是jsfiddle。

预期结果将是 -

第一次提醒 - ' objModified' 第二次提醒 - ' arrModified'

在我的情况下,我总是得到初始的'。

3 个答案:

答案 0 :(得分:0)

我认为您要做的是传递对象引用

var obj = { var: 'initial' };
var a = [{ test: 'old', new: 'no' }, { test: obj, new: 'yes' }];
var o = { test: obj, new: 'yes' };

obj.var = 'objModified';

alert(o.test.var); // Changes correctly

obj.var = 'arrModified';

alert(o.test.var);

更新了小提琴:https://jsfiddle.net/echonax/009kqqrt/2/

如果传递字符串引用,如test: obj.var,因为字符串是不可变的,它不会改变。

答案 1 :(得分:0)

您编写 a o 对象的方式在创建它们时引用 obj.var 的值。

创建该值后对该值的任何更改都不会传播到 a o

如果您希望以这种方式工作,则需要将 test 属性引用为对象,而不是直接引用该值。

obj = { var: 'initial' };
a = [{ test: 'old', new: 'no' }, { test: obj, new: 'yes' }];
o = { test: obj, new: 'yes' };

obj.var = 'objModified'; 

alert(o.test.var); // o.test=== obj is true

obj.var = 'arrModified';

alert(a[1].test.var); // a[1].test=== obj is true

答案 2 :(得分:0)

当您创建数组a和对象o时,属性test将使用简单字符串变量的值进行初始化,因此将其值存储为" as值"

obj = { var: 'initial' };
a = [{ test: 'old', new: 'no' }, { test: obj.var, new: 'yes' }];
o = { test: obj.var, new: 'yes' };

如果使用对象引用初始化它,如下例所示:



var obj = { var: 'initial' };
a = [{ test: 'old', new: 'no' }, { test: obj, new: 'yes' }];
o = { test: obj, new: 'yes' };

obj.var = 'objModified';
console.log(o.test.var);
obj.var = 'arrModified';
console.log(a[1].test.var);




您可以看到修改引用对象时会修改它们的值,因为它们的值是通过引用存储的。

我希望很清楚,再见。