有一个什么都不做的 JavaScript 函数有效吗?

Is it valid to have a JavaScript function that does nothing?

我正在使用三个文本框来获取数据并将它们显示在 jQuery 自动完成下拉列表中。由于 JavaScript 对其对象相当灵活并且没有接口。我制作了一个 API 调用对象,然后接收一个函数对象,该对象被传播到它的自身中。

export function ApiCall(baseUrl, domain, path, options = {}) {
    return {
        baseUrl: baseUrl,
        domain: domain,
        path: path,
        getData: function () {
            return $.ajax({
                url: this.fullUrl,
                dataType: "json",
                data: this.data,
                success: function(data) { return data }
            });
        },
        ...options
    }
}

这让我摆脱了大部分 if 块,因为我不再需要检查 html ID。然而,我 运行 对此有两个问题。一些对象需要有一个什么都不做的空函数,而其他对象则需要该函数做一些事情。

addError: function () {
                        addError(this.title)
                    },

及其他

addError: () => { }

这正在增长一些,我担心这些对象可能有一些植入它们而另一些没有。就像现在一样,代码运行良好,它已经清除了许多 if 块,这些块根据正在传递的 html ID 做不同的事情,并且只在对象上运行函数。这有效吗?有什么更好的方法来实现这个?有什么方法可以清除它以使其更具可读性并减少混淆?

是的,偶尔会遇到空操作函数,有时也没有办法绕过它们。但是,如果不编写无操作函数,而是完全省略该函数,通常会更有意义。

如果有不受您控制的代码无条件调用对象的 属性,但您不希望发生这种情况时发生任何事情,那么空操作函数是您唯一的选择。

但是如果使用该对象的代码在您的控制之下,您会发现如果您在调用它之前检查 属性 是否存在,您的代码会明显更简洁。例如,如果给定一个对象,如果 属性 存在,你想对其调用 addError,你可以这样做:

obj.addError?.();

让你不必做

addError: () => { }

无处不在。

如果您不得不改用空操作函数,这有点不幸(IMO),但没什么大不了的。