Простейший пример, но не работает.
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, время: 21:18. |