一段程序让你看懂JS中的this

看下面这段程序

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();
    原文作者:逍遥乡
    原文地址: https://segmentfault.com/a/1190000006984895
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞