代码如下:我自己写的method1方法调用getId,this始终指向window,所以弹出的值是1,而不是Btn,我要想像addEventListener那样弹出Btn如何做到?<input type="button" id="Btn" value="点击"  />var id=1
var el=document.getElementById("Btn");
el.addEventListener('click',getId,false);//在火狐中会执行这一句
function getId(){
   alert(this.id)
}el.method1=function(){
    getId() 
}
el.method1()

解决方案 »

  1.   

    这个应该是和运行这个函数块的作用域,环境有关
    因为你之前写的是把函数在直接运行的,所以this=window
    你把该函数绑定到一个元素的事件上面,那么这个this就表示了发生这个事件的元素了。
    这个我自己也不怎么理解。上面的可以做以下改动
    el.method1=getId;
    el.method1();
    试试
      

  2.   

    可以通过call,apply改变作用域var id=1
    var el=document.getElementById("Btn");
    el.addEventListener('click',getId,false);//在火狐中会执行这一句
    function getId(){
       alert(this.id)
    }
     
    el.method1=function(){
        getId.call(el) 
    }
    el.method1()