<script language="javascript">
  function JSClass()
  {
      this.m_Text ="division element";
      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);
  };       JSClass.prototype.ToString = function()
  {
      alert(this.m_Text);
  };  var jc = new JSClass();
  jc.Render(); 
  jc.ToString();</script>
为什么上面的结果会是:显示"division element",同时提示“division element”,确定后点击文字"division element",将会显示:"undefined"。
为什么是undefined。不大明白,在此发帖请教了......

解决方案 »

  1.   


    <body>
    </body>
    <script language="javascript"> 
      function JSClass() 
      { 
          this.m_Text ="division element"; 
          this.m_Element = document.createElement('DIV'); 
          this.m_Element.innerHTML = this.m_Text;  
          (function(a){
      a.m_Element.onclick=function(){a.ToString()}
          })(this)  } 
      
      JSClass.prototype.Render = function() 
      { 
          document.body.appendChild(this.m_Element); 
      };      JSClass.prototype.ToString = function() 
      { 
          alert(this.m_Text); 
      };   var jc = new JSClass(); 
      jc.Render(); 
      jc.ToString(); </script> 
      

  2.   

    你点击的时候的this引用的是this.m_Element吧?
      

  3.   

    问题出在这里:  JSClass.prototype.ToString = function() 
      { 
          alert(this.m_Text); 
      }; js在生成div层时第一次alert的是jc.m_Text;
    而你点击层的时候alert的是div层的m_Text属性,但是m_Text这个属性并不存在,而提示了undefined以下为修改后代码<body></body>
    <script language="javascript"> 
      function JSClass() 
      { 
          this.m_Text ="division element"; 
          this.m_Element = document.createElement('DIV'); 
          this.m_Element.innerHTML = this.m_Text; 
            
          //this.m_Element.attachEvent('onclick', this.ToString);
      this.m_Element.onclick=function(){
    alert(this.innerHTML);
      }
      } 
      
      JSClass.prototype.Render = function() 
      { 
          document.body.appendChild(this.m_Element); 
      };    
    /*
      JSClass.prototype.ToString = function() 
      { 
          alert(this.innerHTML); 
      }; 
    */
      var jc = new JSClass(); 
      jc.Render(); 
      jc.ToString(); </script>