Простейший пример, но не работает.
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 |
Цитата:
|
"тот" пример:
function User() { this.id = 1; this.sayHi = function() { alert(this.id); }.bind(this); } var user = new User(); setTimeout(user.sayHi, 1000); // выведет "1" Мой код выше с obj - аналогичен, только у меня сразу объект, без функции-конструтора. |
Цитата:
|
Ок, конструктива с твоей стороны не будет, я понял. Просто не отписывайся тут и всё.
|
setTimeout(user.sayHi, 1000); Тут user - объект, а sayHi - его метод. А что у тебя? Цитата:
|
Цитата:
|
Мой вопрос и сравнение моего кода с примером по ссылкы - вполне адекватны. И там, и там копирование функции с потерей контекста из-за this
Цитата:
Цитата:
Цитата:
Просто не отписывай тут и всё. Смысл этой просьбы-то ты должен понимать, она не сложная. |
Цитата:
Цитата:
Цитата:
|
Пиздец, задал вопрос на форуме, вместо того что бы ответить где я ошибаюсь, чел с колобком на аватаре начал писать "да ты че, ухаха", ставя многоточия смайлы после каждой строчки, назвал "тупым доцентом" (это же интернет, зачем тут следить за своим языком, ведь тут можно не бояться получить по ***** за свои слова), на сам мой вопрос отвечать даже не думал. На просьбу перестать флудить чел продолжает это делать и пишет при этом "твоя просьба успешна.....)))))" И даже после этой фразы продолжает писать ахинею
И это все из-за того, что я спросил, почему в моем примере не работет прием с методом bind. Ахренеть, ну у вас и имбицилы тут водятся. |
Эээ, а мне теперь можно написать? :D
|
Цитата:
|
Часовой пояс GMT +3, время: 01:42. |