Как известно, объекты в JavaScript копируются по ссылке, а не по значению. Но нижеприведенный код, который я написал, работает не так, как ожидалось. Может быть, я не знаю правильного поведения. Пожалуйста, дайте представление и возможное решение, чтобы избежать подобных случаев.Скопировать по ссылке
Мой код:
var a = {
obj:{u:1,v:2,w:3},
setobj:function(objj){
this.obj = objj
}
};
var b = a;
var m = b.obj
console.log(m);
Он печатает - {u:1,v:2,w:3}
,
тогдашний
var c = a;
c.setobj({x:4,y:5});
console.log(c.obj); //prints {x:4,y:5}
console.log(a.obj); //prints {x:4,y:5}
console.log(b.obj); //prints {x:4,y:5}
но:
console.log(m); //prints {u:1,v:2,w:3}
Я ожидал м содержать ссылку b.obj, где b содержит ссылку a. Последний работает, но первая (ссылка m) не работает. Пожалуйста, дайте представление об этом и скажите мне, что мне не хватает. Это очень глупое мое предположение или есть что-то, чего я не знаю?
Да, ваше предположение неверно. m - ссылка на объект, который был сохранен в b.obj. Вы переполнили эту ссылку позже, но она не позволит магическим образом указать m на новый объект. Кроме того, «копировать по ссылке» на самом деле не имеет большого смысла. – flq