javascript - 有什么方法可以为 Javascript 数组中的惰性变量定义 getter?

标签 javascript arrays lazy-evaluation

我正在尝试将元素添加到延迟计算的数组中。这意味着在访问它们之前不会计算或知道它们的值。这就像一个 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/

相关文章:

php - 存储未知长度的数组

javascript - 如何在对象数组中找到具有最高值的对象?

Swift 弱惰性变量不会编译

ruby - 默认情况下使可枚举对象惰性

performance - Haskell 风格/效率

javascript - Jquery 或 javascript 在 <div> 中的 x 个字符后添加一个换行符 <br/>

javascript - 如何使用正交投影进行缩放?

ruby-on-rails - 根据数组内容插入数组的特定位置Ruby

javascript - CSS - 制作 algolia 下拉菜单,结果显示在 Bootstrap 导航栏的下拉菜单上

javascript - 如何使用 Angular 在页面加载时设置事件状态