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
Что показывает, что это действительно указатель на объект, который был помещен в массив