2013-09-19 2 views
3

Простой пример того, что я хотел бы сделать:Javascript объединить два объекта сохраняя ссылки

data = {name: 'fred'}; 

newData = {}; 
newData.name = data.name; 

newData.name = 'ted'; 

console.log(data.name); // I want this to be ted not fred 

Можно ли в JavaScript, чтобы изменить второй объект и его изменить в первую очередь? Я использую сплайсинг 1.5 (yui 3.4.0) и пытаюсь объединить объекты для создания данных, чтобы данные отображались в одной строке, но они должны быть доступны для редактирования, поэтому нужно указать на исходный объект.

Возможно ли это, или мне нужно будет использовать события для возврата данных к первому объекту?

+0

http://stackoverflow.com/questions/1308624/pass-a-string-by-reference-in-javascript может помочь –

ответ

-1

Да, вы можете создать новую ссылку на объект первого (вашего объекта данных) как newData, используя javascripts Object(). Изменение свойств объектов отражает другой.

data = {name: 'fred'}; 

var newData = new Object(data); 

newData.name = 'ted'; 

console.log(data.name);// outputs ted 

вы можете прочитать больше об объекте() here

+0

'нового объекта (данные)' не создает новый объект Справка. вы должны отметить, что 'newData === data' в этом примере. – zzzzBov

+0

Вам не нужно, чтобы javascript передавал объекты по ссылке как по умолчанию, поэтому '' 'data = {name: 'ted'}; newData = данные; newData.name = 'fred'; '' 'достигнет того же самого. Я думаю, что OP хочет копировать различные свойства '' 'data''' в' '' newData''', не выходя из одного и того же объекта. Поэтому он все еще может добавлять свойства к '' 'newData''', которые не должны находиться на' '' data'''. И это не большая проблема, пока значение не является неизменяемым объектом, как строка. –

+0

Как упоминает Мануэль Гёрлих, я пытаюсь использовать различные свойства, не будучи одним и тем же объектом. Я не знал, что струны были неизменными, так что спасибо Мануэлю. –

1

Вы можете сделать это, если свойство ваших объектов также является объектом. Это работает:

data = {name: {first:'fred'}}; 

newData = {}; 
newData.name = data.name; 

newData.name.first = 'ted'; 

console.log(data.name.first) // outputs ted 
+0

Но что, если я сказал вам, что «fred» - это объект: P –

+0

@ ManuelGörlich не имеет значения, name.first будет ссылаться на новый объект: http://jsfiddle.net/6H8VG/ –

Смежные вопросы