用于定期更新对象的javascript对象模式

时间:2011-01-27 13:31:37

标签: javascript

我想定期更新js对象(在创建对象后初始化之后),并尝试以下操作:

var data = {
    foo: -1,
    bar: -1,
    refresh: function() {
        this.foo = getFoo();
        this.bar = getBar();
    }()
}

目前这不起作用,this似乎没有引用数据对象。我可以尝试一些不同的排列 - 但是想知道我是不是在这里咆哮错了树?我应该为需要定期更新的对象(外部调用)使用什么样的模式。

2 个答案:

答案 0 :(得分:2)

你非常接近,抛弃那些以()结尾的人:

var data = {
    foo: -1,
    bar: -1,
    refresh: function() {
        this.foo = getFoo();
        this.bar = getBar();
    } // <== here
};    // <== Also, semicolon here for best practice

用法:

data.refresh();

您需要提供getFoogetBar函数,或接受refresh中的参数,例如:

var data = {
    foo: -1,
    bar: -1,
    refresh: function(newFoo, newBar) {
        this.foo = newFoo;
        this.bar = newBar;
    }
};

用法:

data.refresh(42, 52);

答案 1 :(得分:1)

this将调用你的函数。在您的情况下,您会立即自动调用它,因此,它将由window对象调用。

你能做的是:

var data = {
    foo: -1,
    bar: -1,
    refresh: function() {
        this.foo = getFoo();
        this.bar = getBar();
    }
}
data.refresh();