我最近看到一个侦听器定义在绑定到没有任何东西的对象的方法中。很好的例子就是这个
var obj={
shout:function(){
onclick = function(){
alert("hi");
}
}
}
obj.shout()
这就像window.onclick = shout;
当我们重新定义这样的功能时
var obj={
shout:function(s){
onclick = function(s){
alert(s);
}
}
}
obj.shout('hi')
输出[对象鼠标事件]
如何自动绑定到窗口对象?这应该指向obj对象,如果onclick被绑定到this
的喊叫,这引用obj
(我的怀疑)它是如何与窗口对象一起工作的?
答案 0 :(得分:3)
如何自动绑定到窗口对象?
因为无论何时声明变量而不使用var
关键字,都会将其分配给window object
。因此,在我们的情况下,您已指定function
至onclick
而未指定var
,因此该功能已分配window.onclick
。
如果你想使用通过constructor
函数传递的值,那么你需要写一个closure
,
var obj={
shout:function(s){
onclick = function(){
//-----------------^ remove the parameter here, and it will become a closure.
alert(s);
}
}
}
obj.shout('hi');
答案 1 :(得分:3)
如何自动绑定到窗口对象?
因为onclick
是window
的属性,window
的所有属性都是全局变量。由于您尚未在任何地方声明onclick
变量,因此onclick = function...
行将分配给全局。