2

我希望能够有两个对相同原始值的引用,并且通过一个所做的任何更改都应该“神奇地”反映到另一个 - 即使用 C 代码作为示例:

// (C code):
int value = 0;
int *p1 = &value;
...
int *p2 = &value;
*p2 = 1;
...
printf("%d", *p1); // gives 1, not 0

到目前为止,我想出的唯一方法是使用额外的对象间接:

var a = { valueWrapper: { num: 1, str: 'initial' } };
var b = a;

// change a

a.valueWrapper.num = 2;
a.valueWrapper.str = 'changed';

// show b

console.log(b.valueWrapper.num);
console.log(b.valueWrapper.str);

// outputs:
//
// $ node test.js 
// 2
// changed

有没有更清洁的方法?

4

2 回答 2

2

在 Javascript 中,整数和字符串等原始类型是按值传递的。没有内置的方法来改变它。

如果不是设计,您可以摆脱“valueWrapper”:

var a = {num :  1, str : "initial"};
var b = a;
a.num = 2;
console.log(b.num); // display 2
于 2013-09-26T08:24:55.317 回答
0

只有一种情况 - 参数和函数参数对象 - 即使值是原始类型,它们也会神奇地相互改变(这在严格模式下不起作用)。

    function magicLink(a,b) {
        arguments[0] = 5;
        arguments[1] = 10;
        console.log([a,b]);
    }

    magicLink(1); // [5, undefined]

这仅适用于调用期间设置的参数。

于 2013-09-26T08:03:59.830 回答