将构造函数改为如下所示:
function tDialog()
  {  
    this.rMask = 1; 
    this.rightWidth = 0;
    this.rightHeight = 0;    rightMaskDiv = top.right.document.createElement("div");
    rightMaskDiv.setAttribute('id','rightMask');
    rightMaskDiv.style.height = this.rightHeight + "px";
    rightMaskDiv.style.width = this.rightWidth + "px";
    rightMaskDiv.style.zIndex = "5000";
    rightMaskDiv.style.filter ="progid:DXImageTransform.Microsoft.Alpha(opacity=40)";
    rightMaskDiv.style.background = "#666666";
    rightMaskDiv.style.top = 0;
    rightMaskDiv.style.position = "absolute";
    
    this.maskDiv = rightMaskDiv; //此处如此赋值,在其他方法中引用this.maskDiv会存在什么问题?    //初始化部分,以下省略...
  }

解决方案 »

  1.   

    作用区域不正确okBtn.onclick = this.enabled; //问题出在这里,该怎么才能执行到最终的函数tEnabled()? function tEnabled()  //该方法使div下的内容变为可操作 
      { 
    //此时的this==okBtn,而不是 tDialog的实例对象了
       alert(this.rMask); //此处在运行中显示undefined,先前不是初始化时就赋值为1吗? 
       if(this.rMask) 
         { 
          /* 移除先前动态创建的div */ 
         } 
      } 
      
      

  2.   

    非常谢谢showbo朋友的答复。
    我在 okBtn.onclick = this.enabled 这句之前加一句 alert(this.rMask);
    显示的是我在之前赋的1。这是什么原因?是不是说明这里的this==tDialog??
    总觉得在进入tEnabled()后this就变了。
      

  3.   

    function tMsgDialog(type,text,title) 
      { 
       var okBtn = document.createElement("input"); 
       okBtn.setAttribute('id','okBtn'); 
       okBtn.type= "button"; 
       okBtn.value = "确  定";            
        var Wrapper=this;//==========================建立闭包对象,此时Wrapper为tDialog的实例对象
       //点击关闭 
       okBtn.onclick =function(){ Wrapper.enabled();}; //=========使用闭包对象,而不是this,this==okBtn   //响应回车               
       okBtn.onkeydown = function () 
                              { 
                                if(event.keyCode == "13") 
                                  { 
                                    Wrapper.enabled();//========使用闭包对象,而不是this,this==okBtn
                                      } 
                              } 
       document.getElementById('btnDiv').appendChild(okBtn); 
      } 
      

  4.   


    我在 okBtn.onclick = this.enabled 这句之前加一句 alert(this.rMask); ,显示的是我在之前赋的1。这是什么原因?
    ---------
    此时this为tDialog的实例,当然能输出1
    但是okBtn.onclick = this.enabled; 这样来添加事件处理时,this.enabled==>tEnabled,但是tEnabled中的this==okBtn了,okBtn无rMask属性,当然为undefined面向对象虽然好用,但要理解作用区域,这个是关键
      

  5.   

    再次严重感谢showbo朋友的热心回复,按你说的,建立闭包对象后,问题解决了。
    要赶快弄明白此处要用闭包对象的原因。