Javascript 如何使键/值对象对与仅在请求键时执行的函数作为值?

Javascript 如何使键/值对象对与仅在请求键时执行的函数作为值?,javascript,Javascript,我希望有一个javascript对象,它将在访问键后返回函数的结果,而不是在访问之前 以下是我到目前为止的情况: const mockTicker = { APPL: { symbol: 'APPLE', last: (() => (randomLastPrice(471.47, 817.63)))() } 所以当我这样做的时候: const fetch = mockTicker['APPL'] // { symbol: 'APPLE',

我希望有一个javascript对象,它将在访问键后返回函数的结果,而不是在访问之前

以下是我到目前为止的情况:

const mockTicker = {
    APPL: {
        symbol: 'APPLE',
        last: (() => (randomLastPrice(471.47, 817.63)))()
    }
所以当我这样做的时候:

const fetch = mockTicker['APPL'] // { symbol: 'APPLE', last: 532.83}
这类作品

但是,我可以看到,每次代码运行时都会触发嵌入最后一个键中的函数。我在randomLastPrice中有一个console.log语句,我可以看到该函数在对象被分配给mockTicker变量的那一刻就被执行

有没有一种方法可以将一个函数附加到key=last,该函数只在我们尝试访问该键时执行?可能像lamda函数这样的概念

因此,我希望能够做到这一点:

let myTickerObject = mockTicker['APPL']; // This is the first time randomLastPrice(471.47, 817.63) is executed.
所以我们得到一个完整的对象作为返回

{ symbol: 'APPLE', timestamp: 1549137843213, last: 532.83 }
这是一个原型:

这将返回:

{ symbol: "APPLE", timestamp: 1549138693551, last: Getter }

您可以使用getter方法,该方法仅在获取密钥时运行,运行时使用随机化值覆盖getter,并返回该值:

常量mockTicker={ 应用程序:{ 符号:“苹果”, 排在最后{ console.log“获取随机数”; Object.definePropertythis,'last',{value:Math.random}; 把这个还给我; } } } console.log'start'; console.logmockTicker.APPL.symbol; console.logmockTicker.APPL.last;
console.logmockTicker.APPL.last 假设应用程序似乎要返回ticker的最后一个值,而不是实现最终调用函数的抽象,您可以简单地将mockTicker的每个属性定义为一个函数

const randomLastPrice = (a, b) => { 
  console.log('not called until now', a, b); return /* value */ 
};

const mockTicker = {
        APPL() {
          return {
             symbol: 'APPLE',
             last: randomLastPrice(471.47, 817.63)
          }
        }
      }

谢谢,但是使用命名函数get last{return randomLastPrice2871.473017.63;}我正在获取last:[Getter]?在我看来不是这样的-在堆栈代码段控制台和浏览器控制台中按Run code snippet,它将显示:start\n APPLE\n getting random number\n\n我无法使用命名函数实现此解决方案。让我看看能不能让它工作。你的解决方案100%有效。只需要调整它,使其与命名函数一起工作,就像我原来的问题一样。括号与点表示法在这里没有区别,尽管点表示法在可能的情况下是普遍首选的-如果您编辑代码段以使用['APPL'],您将看到结果仍然如所需,没有最后一个:[Getter]。是的。它在这里起作用。在所有情况下。但不是在我的实际代码中。可能是因为它是一个node.js脚本。我一直排在最后:[Getter]:为什么APPL不能是一个调用时执行的函数?我想让它跟随let myTickerObject=mockTicker['APPL'];习俗我想我现在知道怎么做了。问题是,我需要得到整个顶级对象和经过评估的内部结构。我试图调整这里的答案,并提出一个getter,它将对APPL key/val而不是内部结构进行操作。这是返回一个函数@symbolx Yes,调用函数let applCurr=mockTicker['APPL'];控制台。logapplCurr['symbol'],applCurr['last']是的。这很有效。谢谢我想不可能只做let curr=mockTicker['APPL']?@symbolx为什么要创建不必要的抽象,而最终目标是执行函数以获取最新值?