setTimeout里面this指向问题

var test = {

    info: "hello",

    fn: function(){

        console.log(this.info);

        setTimeout(arguments.callee, 1000)

    }

}

运行上面的test.fn()的时候。。第一次是可以返回"hello"的。第二次之后就返回"undefined"了,把console.log(this.info)改成console.log(this)可以发现,原因是setTimeout里面的this在第二次以后都变成指向window了。。我们的目的是让this指向test。搜了一下资料。找出一个解决方法:

var test = {

    info: "hello",

    fn: function(){

        console.log(this.info);

        setTimeout(this.bind(this, arguments.callee), 1000);

    },

    bind: function(object, func){

        return function(){

            return func.apply(object, arguments)

        }

    }

}

 

你可能感兴趣的:(settimeout)