2013-09-12 2 views
0

Название может показаться странным, , но я действительно не знаю, как описать эту ситуацию, поскольку я новичок в JavaScript.Переменная, влияющая на ее родительскую переменную

Вот код:

a={}; 
var b=a; 
b['a']='x'; 
console.log(a); 

результат будет:

Object { a="x"} 

не должна быть пустой объект, потому что я установить «х» в переменную б только?

+0

Если вы хотите получить копию «Объекта», это займет [немного больше работы] (http://stackoverflow.com/q/122102) , –

+0

Добро пожаловать в объектно-ориентированное программирование! – BalusC

+0

@JonathanLonowski спасибо за ссылку чувак, :) – Edxz

ответ

7

a содержит ссылку на объект, например:

+-----+  +--------------+ 
| a |------->| (the object) | 
+-----+  +--------------+

Так что, когда вы делаете:

var b = a; 

Теперь у вас есть две переменные, относящиеся к же объекта ,

+-----+ 
| a |---+ 
+-----+ | +--------------+ 
      +--->| (the object) | 
+-----+ | +--------------+ 
| b |---+ 
+-----+

Поэтому, естественно, любые изменения, внесенные в этот объект (добавив свойство к нему, в вашем случае) видны через обе ссылки.

+1

никогда не ожидал такого подробного объяснения, спасибо большое, , наконец, понимаем это: D – Edxz

+0

@Edxz: Рад, что помогло! –

+0

Извините за nitpicking, но почему именно 'b' имеют почти вдвое большую ссылку? Не могли бы вы сделать их так долго? : P – BalusC

0

b является ссылкой на a, так что это нормальное поведение. Чтобы избежать этого, вам нужно сделать клон. Например, используя фреймворк jQuery, вы можете просто выполнить: var b = $.extend(true, {}, a};

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