在对象

时间:2016-03-05 14:36:31

标签: javascript

我最近看到一个侦听器定义在绑定到没有任何东西的对象的方法中。很好的例子就是这个

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(我的怀疑)它是如何与窗口对象一起工作的?

2 个答案:

答案 0 :(得分:3)

如何自动绑定到窗口对象?

因为无论何时声明变量而不使用var关键字,都会将其分配给window object。因此,在我们的情况下,您已指定functiononclick而未指定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)

  

如何自动绑定到窗口对象?

因为onclickwindow的属性,window的所有属性都是全局变量。由于您尚未在任何地方声明onclick变量,因此onclick = function...行将分配给全局。