看下面這段程序函數
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,你只需這樣作:this
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();