有没有办法模仿通过引用而不是值来传递一个函数?

时间:2013-11-17 05:26:52

标签: javascript object reference numbers primitive

我明白这不是原始价值的传递方式,但最好的方法是什么呢?有些侦听器设置为观察对象o,因此我需要n和m始终在对象o 上同步,但我还需要增加数字属性变量,以便我可以根据某些因素传递不同的addOneTo

var o = {a: [], b: [], n: 5, m: 6};
function push5To(arr){
  arr.push(5);
}
push5To(o.a);
o.a[0]; // 5
function addOneTo(num){
  num += 1;
}
addOneTo(o.n);
o.n; // 5 :(

1 个答案:

答案 0 :(得分:4)

这是因为javascript数组是通过引用传递的。 o.a是一个数组。 o.n不是,这是一个简单的数字。

一种方法是让函数返回一个值,并将值赋给o.n。或者:

function addOneTo(map,key){
  map[key] += 1;
}

addOneTo(o,'n');

另外,当@Phrogz说“装箱子”时,他的意思是,将它包裹在一个物体内。对象通过引用传递。像:

var o = {a: [], b: [], n: {"value":5}, m: 6};

function addOneTo(key){
   key.value += 1;
}

编辑:在大多数语言中,没有“按参考传递”。只有“通过价值”。所以在某种程度上,我上面所说的(javascript数组通过引用传递)是错误的。不同的是究竟是通过值传递的内容。对于基元,传递的值是基元的实际值。对于非基元(数组,对象),该值是对象的引用。