如何有一个功能值的键/值对象对被请求的键时,才能执行?

问题描述 投票:-1回答:2

我想有一个JavaScript对象一旦密钥被访问,将返回一个函数的结果,而不是之前。

这是我到目前为止有:

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

所以,当我这样做:

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

这类作品。

不过,我可以看到,埋在last键内的功能被触发的每次我的代码运行。我有console.lograndomLastPrice声明,我可以看到该功能被执行的对象被分配到mockTicker变量的时刻。

有没有办法附上只whem我们试图访问该密钥时执行的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 }

这里是一个原型:enter link description here

返回:

{ symbol: "APPLE", timestamp: 1549138693551, last: Getter }
javascript
2个回答
0
投票

考虑到应用程序似乎是返回,而不是实现一个抽象最终调用你可以简单地定义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)
          }
        }
      }

3
投票

您可以使用一个getter方法,仅运行时关键是得到了,并运行时,会覆盖随机值,吸气,并返回该值:

const mockTicker = {
  APPL: {
    symbol: 'APPLE',
    get last() {
      console.log('getting random number');
      Object.defineProperty(this, 'last', { value: Math.random() });
      return this.last;
    }
  }
}

console.log('start');
console.log(mockTicker.APPL.symbol);
console.log(mockTicker.APPL.last);
console.log(mockTicker.APPL.last);
© www.soinside.com 2019 - 2024. All rights reserved.