簡體   English   中英

將多個類似的 JavaScript 功能合二為一

[英]Combine multiple similar JavaScript functions into one

我正在創建一個需要復制到剪貼板的擴展,但我不希望有 18 個不同的功能(幾乎)做完全相同的事情。

這是我寫的 function:

function copyS1_1() {
    var letter_to_copy = document.getElementById('textarea-S1-1');
    letter_to_copy.select();
    navigator.clipboard.writeText(letter_to_copy.value);
}
function copyS1_2() {
    var letter_to_copy = document.getElementById('textarea-S1-2');
    letter_to_copy.select();
    navigator.clipboard.writeText(letter_to_copy.value);
}

每個 function 被稱為“部分”的“copyS#_#”,然后是該部分中的數字。 我不想擁有其中的 18 個,所以我正在尋找一種方法將其簡化為 3 個功能(每個部分一個,有 3 個。)

您可以使用模板文字和 function arguments 來做到這一點。

function copyFuncForAny(num1, num2) {
    var letter_to_copy = document.getElementById(`textarea-S${num1}-${num2}`);
    letter_to_copy.select();
    navigator.clipboard.writeText(letter_to_copy.value);
}

copyFuncForAny(1, 1);
copyFuncForAny(1, 2);

您可以添加一個參數:

function copyS1(id) {
    var letter_to_copy = document.getElementById('textarea-S1-' + id);
    letter_to_copy.select();
    navigator.clipboard.writeText(letter_to_copy.value);
}

像這樣使用:

copyS1(1)
copyS1(2)
...

它很簡單,只是你自己的 function 像這樣

function copyText(id) {
    var letter_to_copy = document.getElementById(id);
    letter_to_copy.select();
    navigator.clipboard.writeText(letter_to_copy.value);
}

盡可能多地使用它。

為什么不簡單地將字符串作為參數傳遞?

function copyS1_1(id) {
  var letter_to_copy = document.getElementById(id);
  letter_to_copy.select();
  navigator.clipboard.writeText(letter_to_copy.value);
}

textarea-S1-1它在這里唯一變化的值,所以你可以將它作為參數傳遞給一般的 function

function copyS1(textarea) {
    var letter_to_copy = document.getElementById(textarea);
    letter_to_copy.select();
    navigator.clipboard.writeText(letter_to_copy.value);
}

並按如下方式使用

var copyS1_1 = copyS1('textarea-S1-1')
var copyS1_2 = copyS1('textarea-S1-2')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM