我对Javascript相当陌生,遇到了对象引用的问题。以下是重现问题的代码片段。Javascript浅拷贝
function MyVector() {
this.x = 0;
this.y = 0;
}
function MySprite() {
this.pos = new MyVector();
}
var my_sprite = new MySprite();
var my_pos = my_sprite.pos; // my_pos points to my_sprite's vector
var my_vect = new MyVector(); // my_vector is on the heap
my_vect.x = 69;
print("my_pos.x: " + my_pos.x); // prints 0 (expected)
my_sprite.pos = my_vect; // should point to my_vect
print("my_sprite.pos.x: " + my_sprite.pos.x); // prints 69 (expected)
print("my_pos.x: " + my_pos.x); // prints 0, expected to print 69
在最后的打印语句,我会一直期待my_pos.x打印69自my_pos现指my_vect(或不是吗?)。我对Javascript的理解是,只有原始值被实际复制,并且对象分配保持对该对象的单个副本的引用。它看起来像在my_vect赋值之后,my_pos引用以某种方式“分离”并且不再指向my_sprite.pos。
我在这里忽略了Javascript的某些行为吗?
谢谢!
谢谢,这清除了事情。一旦分解,似乎更加明显。 – lhumongous 2011-04-26 18:37:59