我的專案中大約有五次這樣的代碼,我知道我會更頻繁地使用它:
this.messageHandler = ({ data, origin }) => {
if (origin === window.location.origin) {
if (
data.listener === this.listener &&
data.event === 'rowclick'
) {
this.recordId = data.datarow;
}
}
};
window.addEventListener('message', this.messageHandler);
每次這里都是唯一的區別:
this.listener每個類都有唯一的值。this.recordId每次都不同,它可能是this.userId或this.accountId,但到目前為止,我總是設定一個表示記錄 ID 的屬性。
我想創建一個函式來構建這個函式。我認為這在 JavaScript 中是可能的。我似乎記得在我學習語言時使用的眾多 JS 資源之一中看到了有關如何做到這一點的資訊。但是我現在找不到資訊。
理想情況下,我會用這樣的東西替換上面的內容:
window.addEventListender('message', generateHandler(this.listener, (datarow) => {
this.recordId = datarow;
});
我怎樣才能在 JavaScript 中做到這一點?
uj5u.com熱心網友回復:
我很欣賞評論中的提示,他們幫助了很多。這就是我最終寫的:
const generateMessageHandler = (listener, callback) => {
return ({ data, origin }) => {
if (
origin === window.location.origin &&
data.listener === listener &&
data.event === 'rowclick'
) {
callback(data.datarow);
}
};
}
然后用這個呼叫它:
window.addEventListener(
'message',
generateMessageHandler(this.rowClickListenerName, (datarow) => {
this.recordId = datarow;
})
);
我想我已經有了所有的開始,但是在評論者開始談論函式回傳函式之前,有些東西阻礙了確定最終實作。
uj5u.com熱心網友回復:
您當然可以在 JavaScript 中的函式內回傳函式,但您的情況有什么意義?
您可以將處理程式設定為呼叫您的函式的匿名函式:
window.addEventListener('message', () => yourFunction(arg1, arg2, arg3));
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/335666.html
標籤:javascript 功能
