开发者

JavaScript array of pointers like in C++

I'm faced with a situation in JavaScript when I need to update an object via its pointer similar to С++ array of pointers to objects

Example code for my issue:

var foo = new Array();
var bar = function(){ 
    this.test = 1;
    foo.push(this); // push an object (or a copy of object?) but not p开发者_运维百科ointer
};
var barInst = new bar(); // create new instance
// foo[0].test equals 1
barInst.test = 2;
// now barInst.test equals 2 but
// foo[0].test still equals 1 but 2 is needed

So, how can I solve this? Should I use a callback or something like this or there is an easy way to help me to avoid copying the object instead pushing the raw pointer into an array?


JS is pass-by-value, so your original assignment was this.test = the value of 1, in my example, it's this.test = the object pointed to by ptr, so when I change ptr this.test changes as well.

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

Although if you thought that foo.push(this); was similar, it isn't. Since this is an object, the array will indeed contain "raw pointers" to objects, just like you want. You can prove this simply:

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

Which shows that it is indeed a pointer to the object that was pushed onto the array


"create object method pointer"

Object.defineProperty(Object.prototype,'pointer',{
    value:function(arr, val){
       return eval(
                  "this['"+arr.join("']['")+"']"+
                   ((val!==undefined)?("="+JSON.stringify(val)):"")
                  );
     }
});

ex of use

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" )
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜