onclick里的this指的是创建的DIV而不是JSClass这个对象了

解决方案 »

  1.   

    改成这样
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
     <HEAD>
      <TITLE> New Document </TITLE>
      <META NAME="Generator" CONTENT="EditPlus">
      <META NAME="Author" CONTENT="">
      <META NAME="Keywords" CONTENT="">
      <META NAME="Description" CONTENT="">
     </HEAD> <BODY> 
    <script> 
    function   JSClass(jn) 

            this.m_Text   =   'division   element'; 
    this.ToString = function(){
    alert(eval(jn).m_Text);
    };
            this.m_Element   =   document.createElement('DIV'); 
            this.m_Element.innerHTML   =   this.m_Text; 
            this.m_Element.attachEvent('onclick',   this.ToString); 

          
    JSClass.prototype.Render   =   function() 

            document.body.appendChild(this.m_Element); 
    }           var   jc   =   new   JSClass("jc"); 
    jc.Render();   
    jc.ToString(); 
    </script> 
    </BODY> </HTML>
      

  2.   

    是啊这时侯this指的是div对像自己
      

  3.   

    文中得所有this指的都是JSClass() 本身自己程序唯一的错误在于
    点击文字"division   element",将会显示:"undefined"。原因是因为这句
    this.m_Element.attachEvent('onclick',   this.ToString); 
    你给div元素添加的onclick事件是 JSClass()的一个函数名,它是JSClass()的成员
    并不是全局成员,所以onclick当然无效了可以这样
    this.m_Element.attachEvent('onclick',   test); 
    function test()
    {
      alert('test');
    }
      

  4.   


    <BODY> 
    <script> 
    function   JSClass() //创建一个对象,js中创建对象可以用function 对象名或者var 对象名 = function(){}

            this.m_Text   =   'division   element'; //设置JSClass对象的m_Text属性
            this.m_Element   =   document.createElement('DIV'); //设置m_Element
            this.m_Element.innerHTML   =   this.m_Text; //设置m_Element的html内容
            this.m_Element.attachEvent('onclick',   this.ToString); //为m_Element的onclick事件附加一个方法,方法名为ToString,this.ToString表示引用改对象JSClass的ToString发法,如果改方法不通过prototype定义将报错.如果去掉this,则可以不通过prototype定义方法

          
    JSClass.prototype.Render   =   function() //给jsclass对象附加方法Render.调用如:JSClass.Render();

            document.body.appendChild(this.m_Element); 
    }           JSClass.prototype.ToString   =   function() //实现上面定义的ToString方法

            alert(this.m_Text); //这里的this表示JSClass,this.m_Text就是division   element
    }; var   jc   =   new   JSClass(); //实例化一个JSClass对象
    jc.Render();   //调用Render;
    jc.ToString(); //调用ToString;
    </script>