我想通过引用对象a将值3设置为ab

例:

var a ={};
a.a =1;
a.b =2;
var x = a.b;
alert (a.b);// show 2
x =3;
alert (a.b); // I want to see in this line 3 instead 2.

非常感谢

我该怎么做?

===============>>#1 票数:2

你不能那样做。 由于2是基元,因此您没有对其的引用,而是x实际上具有值3

您可以做的是提供一个可修改父对象属性的函数:

var a = {
   a: 1,
   b: 2,
   setB: function(value) {
      this.b = value;
   }
}

a.setB(3);
console.log(a.b);

我认为这比较干净。

要回答您的编辑,是的。 这取决于您在做什么。 如果您具有以下条件:

var a = {
   a: {value: 1},
   b: {value: 2},
};

var x = a.b;
x = {value: 3};

那么ab仍然是{value: 2} ,因为您所做的全部工作都x指向了另一个对象。 但是要意识到x指向ab ,这是一个对象,因此,如果您执行x.value = 3; ab现在具有{value: 3}

===============>>#2 票数:1 已采纳

您在JavaScript中没有指针,因此不能简单地做到这一点。

您通常在JavaScript中“替换”指针的方法是使用回调:

var a ={};
a.a =1;
a.b =2;
var x = a.b;
alert (a.b);// show 2
var f = function(v){ a.b=v};
f(3);
alert (a.b); // alerts 3

该回调可以传递给其他函数,并且可能与该语言中您想要的最接近。

===============>>#3 票数:1

您只能通过引用传递对象。

var a = {};
a.a = 1;
a.b = 2;
var x = a;
alert (a.b); // 2
x.b = 3;
alert (a.b); // 3

演示

===============>>#4 票数:0

再举一个例子

 var a ={};
    a.a =1;
    a.b =2;
    var x =function(v){ a.b=v};
    alert (a.b);// show 2
    x(3);
    alert (a.b); 

===============>>#5 票数:0

当您想传递对值的引用时,可以始终使用装箱。 现实情况是,您的业务案例将确定最适合您的方案。

什么是装箱和拆箱,需要进行哪些取舍?

这是一些未经测试的伪代码,但它应该对您有用。

您有几个选择,可以将整个对象作为参考,或者仅装箱在一个原始值上。

var c={}
c.a = null
c.b = null

//set the value of "c"
c = a;

//change the value of the reference
a.b = 100;

//now the reference has been update
alert( c.b );  // equals 100

或者,如果您只想将int装箱

var boxed_value = {}
boxed_value.total = 100;

var obj_a = {};
obj_a.value_a = boxed_value;

//obj_a.value_a.total = 100;


var obj_b = {};
obj_b.value = boxed_value;

//obj_b.value_a.total = 100
//obj_a.value_a.total = 100

boxed_value.total = 200;
obj_a.value.total = 300;
obj_b.value.total = 400;

//now all values have changed as they are referenced

  ask by user2015930 translate from so

未解决问题?本站智能推荐:

1回复

在javascript / angular中创建播放列表(按值复制数组,但按引用设置嵌套对象)

我正在尝试在有角的应用程序中为音乐播放器创建播放列表,其中将包括随机播放按钮。 现在,我对实际的随机播放功能没有任何问题,我正在使用Fisher Yates随机播放 ,并且工作正常。 单击随机播放按钮后,我将调用随机播放功能: 我创建了一个包含随机播放列表的新数组,因为我仍然需要原始
1回复

Javascript对象本身引用一个值

我有一个表单的状态对象,该对象的每个元素都有其自己的验证器,我需要检查confirmationPassword是否与密码相同,但是我无法引用对象本身内部的密码值,怎么办我解决了吗? 我希望上面的代码变成类似 如您所见,电子邮件和密码验证器是从另一个对象获取的。 在confirm
1回复

如何设置作为“对象”返回的值?

我有一个例子,它的工作原理。 但是,当我尝试设置一个“对象”值与文本一起返回时,它不起作用...响应和请求(控制台Chrome):响应: {"error":{"error":{"context":["Context must be of type \\"object\\ 。 此示例直接在
8回复

Javascript对象如何引用值本身? [重复]

这个问题在这里已有答案: 对象文字/初始化器中的自引用 23答案 可以说我有以下javascript: “key1未定义”时出现此错误。 我试过了 他们似乎从来没有定义过。 如何让key2引用key1的值?
1回复

JavaScript返回的对象属性是通过引用还是返回值?

我有以下有关创建firefox扩展的教程中的代码。 它使用一种创建对象并为其分配对象的方法,这是我以前从未遇到过的,并且有些代码使我感到困惑,尽管我了解JS的工作原理相当不错。 我的问题是,您在自执行函数中创建的变量prefManager在哪里。 然后返回该对象以分配给变量lin
1回复

在JavaScript中使用数字值引用对象属性

我遇到了-似乎-有点奇怪的问题。 假设我有一个像这样的JavaScript对象: 看到这个小提琴进行演示。 单击“开始”以启动计时器并更新值。 如您所见,使用parseInt也不起作用。 我已经在Firefox,Chrome和IE10中对此进行了测试。 它们都表现出相同的行
5回复

替换对象值而不替换引用

如何更新整个对象,比如说: 但保持参考? 我希望在函数外部修改对象。 我的具体情况是在我的函数中使用lodash.pick : 我似乎找不到修改对象的pick函数。 有没有办法做到这一点,还是我需要开始返回对象的副本?
3回复

JavaScript:嵌套对象值可以引用其父对象键吗?

我有一个对象,如下所示: 有没有一种方法可以使用上述嵌套键值对之一中的函数中parentKey和nestedKey1和/或nestedKey2的实际名称中的值? 在我的实际场景中, keys都是我希望用作for loop标准的所有数值。 更新方案到问题 作为学习Jav
2回复

如何通过仅是对对象的引用的变量将值分配给对象?

我真的不能那么模糊地表达这个问题,但是我想你会明白的。 我正在用Javascript开发游戏引擎, Scene对象包含很多东西,它的方法应该更改其中的一个数组,特别是保存所有可以绘制的东西的数组。 该数组的访问方式如下: scene.internals.draw 问题是,
5回复

如何基于引用的值从另一个对象扩展一个对象?

我有两个数组,每个元素都是一个对象: 为每个驾驶员将模型名称复制到汽车对象中的最佳方法是什么? 这是预期的结果: 我的想法是遍历驾驶员,然后遍历每个驾驶员的汽车,然后遍历每辆汽车,然后遍...如此之多的循环。 我希望有一个更简单的方法来解决这个问题。