0

此代码位于 KnockoutJS 视图模型中:

function myViewModel()
{
    this.prop1 = ko.observable(123);
    this.prop2 = ko.observable("Hello");
    ..
    ..
}

myViewModel.prototype.func1 = function()
    {
  alert(this.prop1());             //works fine here

        myTimer = setTimeout(function()
        {
            alert(this.prop1());   //this.prop1() raises an undefined error
        }, 3000);                  //from console: Uncaught TypeError: undefined is not a function  
};

为什么在计时器回调中无法识别该属性?看起来像一个范围问题,但我似乎无法解决它。

4

1 回答 1

2

您应该阅读有关Javascript 范围idiomvar self = this信息。该this关键字在回调函数中可能会出现意外行为,因为它可能被设置为意外的东西(例如调用超时回调的函数,或window,或...)。

像*这样的东西将立即解决您的问题:

myViewModel.prototype.func1 = function()
{
    var self = this;
    alert(self.prop1());             //works fine here

    myTimer = setTimeout(function() {
        alert(self.prop1());
    }, 3000);                
};

*“喜欢”这个,因为您的问题没有实际重现您的问题的代码;复制品在帮助您解决问题方面会更有用

于 2014-10-28T08:03:37.253 回答