代码之家  ›  专栏  ›  技术社区  ›  Chuck

如何创建一个用JavaScript返回函数的函数

  •  0
  • Chuck  · 技术社区  · 3 年前

    在我的项目中,我有大约五次这样的代码,我知道我会经常使用它:

    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中做到这一点?

    2 回复  |  直到 3 年前
        1
  •  3
  •   Chuck    3 年前

    我很感激评论中的提示,它们帮了我很大的忙。这是我最后写的:

    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;
        })
    );
    

    我想我已经掌握了所有的部分,但在评论者开始谈论函数返回函数之前,有些事情阻碍了最终实现的实现。

        2
  •  -1
  •   Robo Robok    3 年前

    您当然可以在JavaScript中的函数中返回函数,但在您的情况下,这有什么意义?

    您只需将处理程序设置为一个匿名函数即可调用您的函数:

    window.addEventListener('message', () => yourFunction(arg1, arg2, arg3));