[英]How to have a key/value object pair with a function as a value that is executed only when the key is requested?
我希望有一個javascript對象,一旦訪問鍵,該對象將返回函數的結果,但不會返回。
這是我到目前為止的內容:
const mockTicker = {
APPL: {
symbol: 'APPLE',
last: (() => (randomLastPrice(471.47, 817.63)))()
}
所以當我這樣做時:
const fetch = mockTicker['APPL'] // { symbol: 'APPLE', last: 532.83}
這種作品。
但是,我可以看到,每次我的代碼運行時,都將觸發埋在last
鍵中的函數。 我在randomLastPrice
內有一個console.log
語句,可以看到該函數在將對象分配給mockTicker
變量的那一刻執行。
有沒有一種方法可以將功能附加到僅在我們嘗試訪問該鍵時才執行的key=last
? 大概像拉達函數一樣?
所以我希望能夠做到這一點:
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並返回該值:
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);
假設應用程序似乎要返回代碼的最后一個值,而不是實現最終調用函數的抽象,則可以簡單地將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)
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.