基于其现有函数编写一个预先计算的对象函数

问题描述

有没有更好的方法来写这个?理想情况下,我想以某种方式在对象文字中写入 pre_calculated_h

const obj = {
  long_calc_f(x) {return 5*x},//Some time consuming calculation
  g(x) {return x + 2},}
obj.pre_calculated_h = function(n) {
  const pre_calculated_values = []

  for (var i = 0; i < n; i++) pre_calculated_values.push(this.g(this.long_calc_f(i)))

  return function(x) {return pre_calculated_values[x]}
}.call(obj,20)

解决方法

您可以将 getter 和引用对象定义为 this,而无需显式传递它。不确定它是否更好:) 但缺点是您需要两次引用属性名称。

const obj = {
  long_calc_f(x) {
    return 5 * x
  },//Some time consuming calculation
  g(x) {
    return x + 2
  },get pre_calculated_h() {
    console.log(`Precalculating`)
    const pre_calculated_values = []

    for (var i = 0; i < 20; i++) pre_calculated_values.push(this.g(this.long_calc_f(i)))

    const value = function(x) {
      return pre_calculated_values[x]
    };

    Object.defineProperty(this,'pre_calculated_h',{
      enumerable: true,writable: false,value
    });

    return value
  }
}

console.log(obj.pre_calculated_h(1),obj.pre_calculated_h(3),obj.pre_calculated_h(15))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...