2012-02-18 4 views
1

У меня возникла странная проблема в JavasSript.Ссылка на объект

Существует три переменные (объявлены как var), они все хранят объект; var object1, object2 и object3.

Итак, теперь я назначаю object2=object1 и object3=object1.

И когда я что-то добавляю к object2, он автоматически добавляется к object3. Странный? : |

Пожалуйста, помогите. Я думаю, что здесь отсутствует базовый фонд, но я не могу его поймать.

+1

Ну да, «Объект» в Javascript передается по ссылке. 'object2 = object1' изменяет переменную' object2' для ссылки на объект в 'object1', он не копирует его. –

+1

Возможный дубликат [Использует ли javascript объекты по ссылке или по значению?] (Http://stackoverflow.com/questions/2267239/does-javascript-handle-objects-by-reference-or-by-value) – epascarello

+0

Как можно Я уверен, что object3 не изменяется при изменении объекта2? – Anupam

ответ

2

Так как это странно?

Вы передаете ссылку на объект и делаете не клонировать объект. Поэтому любая модификация ваших переменных object1-object3 фактически относится к одному и тому же объекту, таким образом, «автоматически обновляя все переменные».

+0

Как я могу клонировать объект, не зная атрибутов объекта? Спасибо .. – Anupam

+0

взгляните на [ответы здесь] (http://stackoverflow.com/questions/728360/copying-an-object-in-javascript). – Sirko

+0

Спасибо, человек, я сделал это, и это работает как шарм! var newObject = jQuery.extend (true, {}, oldObject); – Anupam

2

Когда вы назначаете opject2 = object1, вы не делаете копию объекта1, вы просто спрашиваете, что оба имени относятся к одному и тому же объекту. Вам нужно создать новый объект и скопировать атрибуты из объекта1 в него. Как вы это делаете, зависит от того, какие библиотеки Javascript доступны для вас.

JQuery предоставляет методы копирования described here

+0

Ну, я сделал что-то вроде следующего: object3 = new Object(), а затем object3 = object1. Но проблема остается? Любые средства копирования, если я не знаю атрибутов объекта? У меня есть доступ к jquery 1.7.1; это может помочь? – Anupam

+0

Не верно для всех типов переменных, см. Ответ @ katspaugh. –