'this'关键字在gloabl对象中使用时指的是什么?javascript在全局对象中使用'this'
比方说,例如,我们有:
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);
}
啊,JavaScript,你缺少默认的方法绑定,已经声称它的第一百万个受害者...... – bobince 2010-03-30 13:49:13