我對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