延迟加载参数值

时间:2013-08-01 14:46:40

标签: javascript

我正在尝试做类似

的事情
var foo = {
    bar: '' // do some magic here
};

并且只有当我需要使用该值(稍后在页面上)时,只需调用该属性即可运行延迟加载并发送回值

典型的例子是我有一个restfull API,用于在打开页面时加载用户。 进入菜单后我想访问与它相关的属性(另一个对象),但它在另一个api中,我不想在开头加载所有内容。

在财产电话中是否有某种倾听者?

3 个答案:

答案 0 :(得分:2)

使用Object.definePropery动态计算foo.bar。它适用于all modern browsers

var foo = { };
Object.defineProperty(
    foo,
    "bar",
    {
        get: function () {
            return 'magic return value';
        }
    }
    );

JSFiddle:http://jsfiddle.net/wFYxb/

答案 1 :(得分:1)

听起来您的属性应该只是一个函数定义,并且您可以按需执行该函数:

var foo = {
   bar: function() { return goDoSomething(); }
};

foo.bar();

要保存它,可能多一点 - 用值填充另一个变量,并在它出现后继续使用它。

var foo = new function () {
    var _bar;
    this.bar = function () {
        if (!_bar) {
            _bar = goDoSomething();
        }
        return _bar;
    }
} ();


function goDoSomething() {
    console.log("goDoSomething();");
    return 4;
}

答案 2 :(得分:1)

如果完全您要执行的操作,则Firefox / Chrome /其他一些中的所有JavaScript对象都具有__defineGetter__属性,您可以使用该属性来定义延迟计算的值。< / p>

> a.__defineGetter__('b', function () {return 'c';})
> a.b
"c"