Показать сообщение отдельно
  #19 (permalink)  
Старый 11.12.2011, 11:40
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Livanderiaamarum,

var foo = function() {
     return this;
};

var bar = {
  baz: function () {
    return this;
  }
};

alert([
    foo(), //Window
    foo.prototype.constructor(), //Object 
    bar.baz(), //Object  
    (bar.baz)(), //Object 
    (bar.baz = bar.baz)(), //Window
    (bar.baz = bar.baz()), //Object
     bar.baz  //Object 
].join('\n'));


Рассмотрим подробнее, что происходит с:
(bar.baz = bar.baz)();

В этом случае, согласно спецификации вызывается метод GetValue().
Это значит, что тип Reference заменяется Function и вызов фунции происходит уже в Window, т.к. this будет null

var bar = {
  baz: function () {
    return this;
  }
};

var foo = bar.baz;
alert([
	foo(), //Window
	(some = bar.baz)(), //Window
	(1, bar.baz)() //Window
].join('\n'));

Последний раз редактировалось monolithed, 11.12.2011 в 11:48.
Ответить с цитированием