我正在尝试做类似的事情
var foo = {
bar: '' // do some magic here
};
只有当我需要使用该值(稍后在页面上)时,只需简单地调用该属性将运行延迟加载并发回该值
典型的例子是我有一个在页面打开时加载用户的 restfull API。进入菜单后,我想访问与其相关的属性(另一个对象),但它在另一个 api 中,我不想在开头加载所有内容。
属性调用是否有某种监听器?
我正在尝试做类似的事情
var foo = {
bar: '' // do some magic here
};
只有当我需要使用该值(稍后在页面上)时,只需简单地调用该属性将运行延迟加载并发回该值
典型的例子是我有一个在页面打开时加载用户的 restfull API。进入菜单后,我想访问与其相关的属性(另一个对象),但它在另一个 api 中,我不想在开头加载所有内容。
属性调用是否有某种监听器?
用于动态Object.definePropery
计算foo.bar
。它适用于所有现代浏览器。
var foo = { };
Object.defineProperty(
foo,
"bar",
{
get: function () {
return 'magic return value';
}
}
);
JSFiddle:http: //jsfiddle.net/wFYxb/
听起来您的属性应该只是一个函数定义,并且您按需执行该函数:
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;
}
如果这正是您想要做的,Firefox/Chrome/其他一些中的所有 JavaScript 对象都具有__defineGetter__
可用于定义延迟计算值的属性。
> a.__defineGetter__('b', function () {return 'c';})
> a.b
"c"