鍍金池/ 問答/HTML5  PHP  HTML/ js中setInterval函數(shù)使用時出現(xiàn)的問題

js中setInterval函數(shù)使用時出現(xiàn)的問題

function Test(){
    this.func1=function(){
        console.log("func1")
    }
    this.func2=function(){
        console.log("func2")
    }
    this.func3=function(){
        console.log("func3")
    }
    this.all=function(){
        console.log(this)
        this.func1()
        this.func2()
        this.func3()
    }
}
var test=new Test()
test.all()//這打印出的this就是正確的對象,可正常調(diào)用到func1,func2,func3
setInterval(test.all,1000)//這打印出的this是window,理所當(dāng)然調(diào)不到函數(shù)

請問在setInterval(test.all,1000)語句中,為什么this突然指向了window?

我現(xiàn)在寫的代碼需要setInterval(test.all,1000)這語句,請問如何使著代碼正常運(yùn)行?

求大神解答,很是疑惑

回答
編輯回答
青瓷

bind對象進(jìn)去就行了
setInterval(test.all.bind(test),1000);

2017年11月26日 14:04
編輯回答
涼薄

你的setInterval(test.all,1000) 相當(dāng)于

setInterval(function(){
        console.log(this)
        this.func1()
        this.func2()
        this.func3()
    },1000)

這里已經(jīng)脫離test的上下文了,所以this指向window

要想正常執(zhí)行的話,就要把test上下文傳進(jìn)去:這樣
setInterval(test.all.apply(test),1000) 就可以了

2017年1月12日 19:18