Вот код:
Код:
|
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...