看下面这段程序

var name = "Bob";  
  var nameObj ={  
      name : "Tom",  
      showName : function(){  
          console.log(this.name);  
      },  
      waitShowName : function(){  
          setTimeout(this.showName, 1000);  
      }  
 };  
nameObj.waitShowName();//Bob
nameObj.showName();//Tom

setTimeout函数的默认定义域是全局的,this代指调用他的那个对象,showName()函数是个调用对象为nameObj,故输出了Tom。若要让waitShowName输出Tom,你只需这样做:

    var name = "Bob";  
  var nameObj ={  
      name : "Tom",  
      showName : function(){  
          console.log(this.name);  
      },  

      waitShowName : function(){ 
      var that = this; //将this值保存。有些地方也将that写为self。
          setTimeout(function(){
              console.log(that.name);
          }, 1000);  
      }  
 };  
 
nameObj.waitShowName();

逍遥乡
395 声望12 粉丝

全栈工程师,目前主要使用java和js语言,负责公司新业务的开发工作