function  a(){
this.count=5;
this.a=document.getElementById('aaa');
this.a.addEventListener('click',function(event){
//如何能拿到count的值???拿到事件外部的引用
},false)

解决方案 »

  1.   


    function a(){
    var self=this ;
    this.count=5;
    this.a=document.getElementById('aaa');
    this.a.addEventListener('click',function(event){
     alert(self.count)//通过定义的变量self去引用,事件中的this引用指向的是触发事件的HTMLELEMENT元素
    },false)

      

  2.   

    function a(){
    var count=5;
    this.a=document.getElementById('aaa');
    this.a.addEventListener('click',function(event){
     alert(count);
    },false)
    }
      

  3.   

    直接引用,alert(count);
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head><body>
    <div id="aaa" style="width:100px;height:100px;background:#000000;"></div>
    <script type="text/javascript">
    function a(){
    this.count=5;
    this.a=document.getElementById('aaa');
    this.a.addEventListener('click',function(event){
    //如何能拿到count的值???拿到事件外部的引用
       alert(count);
    },false)
    }
    a(); 
    </script>
    </body>
    </html>
      

  4.   

    #1的方法是对的。但是命名和javascript 关键字重名
    #2的方法也是可以的。但是把他本来的属性变量改成了局部变量
    #3的方法只有在a()函数是顶层function的时候才是对的。所以最正确的做法是
    function a(){
        this.count=5;
        this.a=document.getElementById('aaa');
        var targetThis = this;
        this.a.addEventListener('click',function(event){
            //如何能拿到count的值???拿到事件外部的引用
            alert(targetThis.count);
        },false)
    }
      

  5.   

    lz把问题想复杂了,count在外部定义直接用。如果要拿外部对象的引用this,按14#的做
      

  6.   

    self是window下的属性,但在方法中定义的self是局部变量,如果要访问window下的self可使用window.self访问
      

  7.   

    “#3的方法只有在a()函数是顶层function的时候才是对的。”什么意思?
    #3中如果只是count的传入,函数应该会一级一级往上查找该变量,直到global。
    还望解释下。
      

  8.   

    function a(){
      this.count=5;
      this.a=document.getElementById('aaa');
      var temp= this;
      this.a.addEventListener('click',function(event){
      //如何能拿到count的值???拿到事件外部的引用
      alert(temp.count);
      },false)
    }
      

  9.   

    那是为当前对象添加属性 this.a 就是为对象a也就是function a()添加一个属性a
      

  10.   

    “#3的方法只有在a()函数是顶层function的时候才是对的。”我是对这句话质疑,说的给Function实例a添加属性我也明白。
    还有就是#3中count的传入,编译器会逐级网上找吗?我觉得会报没定义的错误,还是去试下。
      

  11.   

    #3的方法
    直接调用
    a();
    那么里面的this,直接指向window
    而,你里面的count,由于并没有挂靠对象。也就直接指向window。所以能够取到但是如果new a();
    那就不对了
      

  12.   

    this不是指向对象自身的引用吗?那么这里的this应该是指向Function对象a,怎么会是window。如果按照你说的this指向window的话,a里面的属性和方法都添加到window对象,变成全局的了。
    new a()后,type变成object,this换成指向这个obj。
      

  13.   

    a();
    和new a();
    this的指向完全不同
      

  14.   

    因为有这层关系在,才有了一种js的继承方法。叫对象冒充。你可以google下
      

  15.   

    我觉得你一直在答非所问,我当然知道a()和new a()的this指向不同,我不是说了?
    对象冒充说白了,和call和apply原理基本一样。
    我想说的是,a()中的this根本不可能指向window。