javascript范围问题“这个”

时间:2013-04-07 07:56:54

标签: javascript

这是我的代码:

var timer = 
{
    i: "Hello",

    start: function()
    {       
        var self = this;             
        window.setInterval(self.tick, 1000);     
    },

    tick: function()
    {
        console.log(this.i);
    }       
}

timer.start();

为什么javascript控制台会显示undefined

3 个答案:

答案 0 :(得分:3)

您传递了对tick的引用,但没有传递范围。尝试:

start: function(){       
    var self = this;             
    window.setInterval(function(){self.tick();}, 1000);     
}

或使用bind(首先查看浏览器兼容性)

答案 1 :(得分:2)

将this.i更改为timer.i

或使用像

这样的对象声明
function timer() {
var self = this;
.. etc.

答案 2 :(得分:1)

建议将window.setInterval(self.tick, 1000);更改为

window.setInterval(self.tick.bind(self), 1000);