我正在使用三個文本框來獲取資料并在 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 執行不同的操作,并且只是在物件上運行函式。這是有效的嗎?有沒有更好的方法來實作這一點?有什么方法可以清除它,使其更具可讀性和更少混亂?
uj5u.com熱心網友回復:
是的,偶爾會遇到無操作函式,有時無法繞過它們。但是,如果您可以完全省略該函式,而不是撰寫無操作函式,則通常會更有意義。
如果有不受您控制的代碼無條件地呼叫物件的屬性,但您不希望發生這種情況時發生任何事情,那么無操作函式是您唯一的選擇。
但是,如果使用該物件的代碼在您的控制之下,您會發現如果您在呼叫它之前檢查該屬性是否存在,您的代碼將會顯著變瘦。例如,如果給定一個物件,addError如果該屬性存在,你想呼叫它,你可以這樣做:
obj.addError?.();
讓你避免不得不做
addError: () => { }
到處。
如果您必須改用無操作功能,那有點不幸(IMO),但沒什么大不了的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/409398.html
標籤:
