【发布时间】:2014-06-26 15:42:39
【问题描述】:
我想知道是否可以执行以下操作:
var obj = {
counter: (function(){
if(!this.val){ this.val = 0; }
this.val += 1;
return this.val;
})();
};
console.log(obj.counter); //should output 1
console.log(obj.counter); //should output 2
console.log(obj.counter); //should output 3
...
有没有办法从这样的对象中获取字段,以便每次访问时重新评估函数?
【问题讨论】:
-
为什么不用函数而不是字段
-
Counter 被定义为 IIFE,因此您对
this的引用会丢失给 IIFE 本身。因此,每次您拨打obj.counter时,this.val都将是未定义的,因此设置为 0,然后设置为 1。@ksven 击败了我的答案代码,所以我将其作为评论发布。 -
好的,我可以把实际的计数变量放在其他地方,仍然可以自动递增吗?
标签: javascript lazy-evaluation