На что ссылается ключевое слово this при использовании в объекте gloabl?
Скажем, например, у нас есть:
var SomeGlobalObject =
{
rendered: true,
show: function()
{
/*
I should use 'SomeGlobalObject.rendered' below, otherwise it
won't work when called from event scope.
But it works when called from timer scope!!
How can this be?
*/
if(this.rendered)
alert("hello");
}
}
Теперь, если мы вызовем встроенный скрипт на странице HTML:
SomeGlobalObject.show();
window.setTimeout("Msg.show()", 1000);
все работает нормально.
Но если мы сделаем что-то вроде
AppendEvent(window, 'load', Msg.show);
мы получаем ошибку, поскольку this.rendered не вызывается при вызове из области действия события.
- Знаете ли вы, почему это происходит?
- Не могли бы вы объяснить, есть ли другой разумный способ сделать это без необходимости каждый раз переписывать SomeGlobalObject.someProperty в код SomeGlobalObject?
Спасибо!
AppendEvent - это простая кросс-браузерная функция для добавления события, код которого приведен ниже, но это не имеет значения для ответа на поставленные выше вопросы.
function AppendEvent(html_element, event_name, event_function)
{
if(html_element.attachEvent) //IE
return html_element.attachEvent("on" + event_name, event_function);
else
if(html_element.addEventListener) //FF
html_element.addEventListener(event_name, event_function, false);
}