Показать сообщение отдельно
  #1 (permalink)  
Старый 24.07.2012, 12:16
Интересующийся
Отправить личное сообщение для dump Посмотреть профиль Найти все сообщения от dump
 
Регистрация: 14.07.2011
Сообщений: 26

Почему некоторые операторы возвращают значения, а не ссылки?
Вот код:

Код:
v=1;
var foo = {bar: function () {alert(this.v);}, v:2};

foo.bar(); // 2
(foo.bar)(); // 2

(foo.bar = foo.bar)(); // 1
(false || foo.bar)(); // 2
(foo.bar, foo.bar)(); // 1
Почему он в последовательно выводит 22121, хотя должен бы 22222? Вот здесь - http://dmitrysoshnikov.com/ecmascrip...#tip-reference сказано, что это из-за того, что если вызывается значение не ссылочного типа, то this равно null, а следовательно global. Но я не могу понять, почему оператор присваивания возвращает значение не типа reference? И почему та же запятая, возвращает значение, а не ссылку? Ведь функция - это ссылочный тип, как и любой другой объект, а значит (foo.bar = foo.bar)(); должно вызвать по ссылке и установить this в значение foo...
Ответить с цитированием