JavaScript指针数组,如C++;

JavaScript指针数组,如C++;,javascript,arrays,pointers,object,Javascript,Arrays,Pointers,Object,在JavaScript中,当我需要通过类似于对象指针的С++数组的指针来更新对象时,我遇到了一种情况 我的问题的示例代码: var foo=new Array(); var bar=函数(){ 本试验=1; 推送(this);//推送对象(或对象的副本?),但不推送指针 }; var barInst=new bar();//创建新实例 //foo[0]。测试值等于1 barInst.test=2; //现在barInst.test等于2,但是 //foo[0]。test仍然等于1,但需要2

在JavaScript中,当我需要通过类似于对象指针的С++数组的指针来更新对象时,我遇到了一种情况

我的问题的示例代码:

var foo=new Array();
var bar=函数(){
本试验=1;
推送(this);//推送对象(或对象的副本?),但不推送指针
};
var barInst=new bar();//创建新实例
//foo[0]。测试值等于1
barInst.test=2;
//现在barInst.test等于2,但是
//foo[0]。test仍然等于1,但需要2


那么,我该如何解决这个问题呢?我是否应该使用回调或类似的方法,或者有一种简单的方法来帮助我避免复制对象,而不是将原始指针推入数组?

JS是按值传递的,因此您最初的赋值是
this.test=值1
,在我的示例中,它是
this.test=ptr
指向的对象,所以当我改变ptr时,这个测试也会改变

var foo = [],
    ptr = {val: 1},
    bar = function(){ 
       this.test = ptr;
       foo.push(this); // push an object (or a copy of object?) but not pointer
    },
    barInst = new bar(); // create new instance
    // foo[0].test.val equals 1
    ptr.val = 2;
    // foo[0].test.val equals 2
虽然如果你认为
foo.push(这个)与之类似,但事实并非如此。因为这是一个对象,所以数组实际上将包含指向对象的“原始指针”,就像您想要的那样。你可以简单地证明这一点:

foo[0].test = 3;
// barInst.test === 3

这表明它确实是一个指向被推到数组上的对象的指针

JS是按值传递的,因此您最初的赋值是
this.test=1的值
,在我的示例中,它是
this.test=ptr
指向的对象,因此当我更改
ptr
时,这个.test
也会更改

var foo = [],
    ptr = {val: 1},
    bar = function(){ 
       this.test = ptr;
       foo.push(this); // push an object (or a copy of object?) but not pointer
    },
    barInst = new bar(); // create new instance
    // foo[0].test.val equals 1
    ptr.val = 2;
    // foo[0].test.val equals 2
虽然如果你认为
foo.push(这个)与之类似,但事实并非如此。因为这是一个对象,所以数组实际上将包含指向对象的“原始指针”,就像您想要的那样。你可以简单地证明这一点:

foo[0].test = 3;
// barInst.test === 3
这表明它确实是指向推送到数组上的对象的指针

“创建对象方法指针

使用前

var o={a:1,b:{b1:2,b2:3},c:[1,2,3]}, arr=['b','b2']
o.pointer(arr)  // value 3
o.pointer(['c',0], "new_value" )
“创建对象方法指针

使用前

var o={a:1,b:{b1:2,b2:3},c:[1,2,3]}, arr=['b','b2']
o.pointer(arr)  // value 3
o.pointer(['c',0], "new_value" )

你的意思是不是
barInst.test=2
<代码>栏
是构造函数,而不是对象。也就是说,
foo[0]
不等于
bar
…哦,对不起。是的,我的意思是barInst.test而不是bar.test在这种情况下,您的代码应该可以工作。是吗?看:哦。。是的,很有效。。我也查看了原始资料,发现了一个错误,这不再是问题了。这两个代码段(原始代码和davin的代码)都在工作。非常感谢您的帮助!你的意思是不是
barInst.test=2
<代码>栏
是构造函数,而不是对象。也就是说,
foo[0]
不等于
bar
…哦,对不起。是的,我的意思是barInst.test而不是bar.test在这种情况下,您的代码应该可以工作。是吗?看:哦。。是的,很有效。。我也查看了原始资料,发现了一个错误,这不再是问题了。这两个代码段(原始代码和davin的代码)都在工作。非常感谢您的帮助!可能会产生无法逃避的问题“可能会产生无法逃避的问题”