Простейший пример, но не работает.
var obj = { name: 'ololosha', what: function() { alert(this.name); } }; function ololo(fn) { fn(); } ololo(obj.what); В результате я вижу пустой алерт. Консоль фаербага ни одной ошибка не показывает. 1) почему алерт пустой и код начинает работать, только если сделать так: ololo(function() { obj.what(); }) 2) почему консоль фаербага не показывает ни одной ошибки при пустом алерте? |
ololosh,
потому что увы имя окна пусто - присвойте имя и получите результат ))) var obj = { name: 'ololosha', what: function() { alert(this.name); } }; function ololo(fn) { fn(); } window.name = "bla bla" ololo(obj.what); |
Или через Function.prototype.bind (ES5)
|
|
Цитата:
function() { alert(this.name); } И поскольку (как верно заметил) Цитата:
При таком варианте Цитата:
Цитата:
|
ОБЪЯСНЕНИЕ НОРМАЛЬНОЕ:
в функции, this не строго привязан к обьекту, а зависит от формы вызова. он ссылается на то что слева через точку от вызываемой функции, если же там ни чего нет то он равен window передав метод обьекта в ololo ты как бы оторвал его от обьекта, и this больше не ссылается на обьект. |
Цитата:
|
Цитата:
|
тогда почему такой варинат тоже не работает?
var obj = { id: 123, what: function() { alert(this.id); }.bind(this) }; func = obj.what; func(); func() выводит алерт с undefined Я ж делал все как тут нааписано: http://learn.javascript.ru/bind |
Цитата:
|
Часовой пояс GMT +3, время: 19:04. |