有一个什么都不做的 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),但没什么大不了的。
我正在使用三个文本框来获取数据并将它们显示在 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),但没什么大不了的。