我正在尝试做类似
的事情var foo = {
bar: '' // do some magic here
};
并且只有当我需要使用该值(稍后在页面上)时,只需调用该属性即可运行延迟加载并发送回值
典型的例子是我有一个restfull API,用于在打开页面时加载用户。 进入菜单后我想访问与它相关的属性(另一个对象),但它在另一个api中,我不想在开头加载所有内容。
在财产电话中是否有某种倾听者?
答案 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"