Rut*_*ulV 2 javascript lazy-evaluation
我想知道是否可以执行以下操作:
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
...
Run Code Online (Sandbox Code Playgroud)
有没有办法从这样的对象中获取字段,以便每次访问该函数时都会重新评估一个函数?
您可以使用吸气剂:
var obj = {};
Object.defineProperty(obj,"counter",{
get: function() {
this.val = this.val || 0;
this.val++;
return this.val;
}
});
console.log(obj.counter); // 1
console.log(obj.counter); // 2
console.log(obj.counter); // 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
994 次 |
| 最近记录: |