[英]JavaScript array of pointers like in C++
當我需要通過類似於指向對象的С++數組指針的指針更新對象時,我遇到了JavaScript的情況
我的問題的示例代碼:
var foo = new Array(); var bar = function(){ this.test = 1; foo.push(this); // push an object (or a copy of object?) but not pointer }; 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
那么,我該如何解決這個問題呢? 我應該使用回調或類似的東西,還是有一種簡單的方法來幫助我避免復制對象而不是將原始指針推入數組?
JS是按值傳遞的,所以你的原始賦值是this.test = the value of 1
,在我的例子中,它是this.test = the object pointed to by ptr
,所以當我改變ptr
this.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(this);
是相似的,事實並非如此。 由於這是一個對象,因此數組確實包含對象的“原始指針”,就像你想要的那樣。 你可以簡單地證明這一點:
foo[0].test = 3;
// barInst.test === 3
這表明它確實是一個指向被推到數組上的對象的指針
“創建對象方法指針 ”
Object.defineProperty(Object.prototype,'pointer',{
value:function(arr, val){
return eval(
"this['"+arr.join("']['")+"']"+
((val!==undefined)?("="+JSON.stringify(val)):"")
);
}
});
不用了
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" )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.