我想有一个JavaScript对象一旦密钥被访问,将返回一个函数的结果,而不是之前。
这是我到目前为止有:
const mockTicker = {
APPL: {
symbol: 'APPLE',
last: (() => (randomLastPrice(471.47, 817.63)))()
}
所以,当我这样做:
const fetch = mockTicker['APPL'] // { symbol: 'APPLE', last: 532.83}
这类作品。
不过,我可以看到,埋在last
键内的功能被触发的每次我的代码运行。我有console.log
内randomLastPrice
声明,我可以看到该功能被执行的对象被分配到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 }
考虑到应用程序似乎是返回,而不是实现一个抽象最终调用你可以简单地定义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)
}
}
}
您可以使用一个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);