我正在尝试将元素添加到延迟计算的数组中。这意味着在访问它们之前不会计算或知道它们的值。这就像一个 previous question I asked但对于对象。
我最终为对象做的是
Object.prototype.lazy = function(var_name, value_function) {
this.__defineGetter__(var_name, function() {
var saved_value = value_function();
this.__defineGetter__(var_name, function() {
return saved_value;
});
return saved_value;
});
}
lazy('exampleField', function() {
// the code that returns the value I want
});
但我还没有想出一种方法来为真正的数组做这件事。数组没有这样的 setter 。您可以将一个函数推送到一个数组,但您必须将它作为一个函数来调用,以便它返回您真正想要的对象。我现在正在做的是创建一个我将其视为数组的对象。
Object.prototype.lazy_push = function(value_function) {
if(!this.length)
this.length = 0;
this.lazy(this.length++, value_function);
}
所以我想知道的是,有没有一种方法可以同时在数组而不是假数组上执行此操作?
更新:以下函数仅在 value_function 返回原始数据类型时有效。
Array.prototype.lazy_push = function(value_function) {
var a = this,
i = this.length;
this.push({
toString: function() {
return a[i] = value_function();
}
});
}
如果您尝试推送一个包含属性的对象,那么在您直接访问该对象之前,您将无法访问这些属性。这不会发生在 setter 上,这就是为什么我想要某种 Javascript 设置语法。现在我将使用假数组,这对我正在做的事情来说已经足够了。
最佳答案
没有。不幸的是,这是一个大问题。
关于javascript - 有什么方法可以为 Javascript 数组中的惰性变量定义 getter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2952573/