Saya memiliki beberapa fungsi yang terkadang (tidak selalu) akan menerima panggilan balik dan menjalankannya. Apakah memeriksa apakah callback didefinisikan / berfungsi dengan gaya yang baik atau apakah ada cara yang lebih baik?
Contoh:
function save (callback){
.....do stuff......
if(typeof callback !== 'undefined'){
callback();
};
};
javascript
coding-style
callback
henry.oswald
sumber
sumber
typeof callback !== undefined
jadi tinggalkan'
save()
? Bukankah itu akan memberikan peringatan kesalahan atau linting karena ada argumen yang hilang? Atau tidak apa-apa dan panggilan balik sederhanaundefined
?Jawaban:
Saya pribadi lebih suka
typeof callback === 'function' && callback();
Namun
typeof
perintahnya cerdik dan hanya boleh digunakan untuk"undefined"
dan"function"
Masalah dengan yang
typeof !== undefined
adalah bahwa pengguna mungkin mengirimkan nilai yang didefinisikan dan bukan fungsisumber
typeof
tidak cerdik. Terkadang tidak jelas, tetapi saya tidak akan menyebutnya cerdik. Setuju, meskipun, bahwa jika Anda akan memanggil callback sebagai sebuah fungsi, yang terbaik adalah memeriksa bahwa itu sebenarnya sebuah fungsi dan bukan, Anda tahu, sebuah angka. :-)"object"
95% dari waktu.typeof
tidak menyebabkan tinju.typeof "foo"
adalah"string"
, tidak"object"
. Ini sebenarnya satu-satunya cara nyata untuk mengetahui apakah Anda berurusan dengan string primitif atauString
objek. (Mungkin Anda sedang memikirkanObject.prototype.toString
, yang sangat berguna , tetapi memang menyebabkan tinju.)&&
omong-omong..toString
itu indah untuk menemukan[[Class]]
.Anda juga bisa melakukan:
Ini sangat berguna jika Anda kebetulan menggunakannya
callback
di beberapa tempat.Selain itu, jika Anda menggunakan
jQuery
, Anda sudah memiliki fungsi seperti itu, namanya $ .noopsumber
callback = callback || function(){};
function save (callback=noop) { ...
Lakukan saja
Saya lebih suka memanggil callback jika disediakan, apa pun jenisnya. Jangan biarkan gagal secara diam-diam, sehingga pelaksana tahu bahwa dia memberikan argumen yang salah dan dapat memperbaikinya.
sumber
ECMAScript 6
sumber
Daripada menjadikan panggilan balik opsional, tetapkan saja default dan panggil itu apa pun yang terjadi
Saat digunakan
Gaya seperti itu disebut gaya penerusan-lanjutan . Berikut adalah contoh nyata
combinations
, yang menghasilkan semua kemungkinan kombinasi input ArrayKarena
combinations
didefinisikan dalam gaya penerusan-penerusan, panggilan di atas secara efektif samaKami juga dapat meneruskan kelanjutan kustom yang melakukan hal lain dengan hasilnya
Gaya passing lanjutan dapat digunakan dengan hasil yang sangat elegan
sumber
Saya sangat lelah melihat cuplikan yang sama berulang kali saya menulis ini:
Saya memiliki ratusan fungsi yang melakukan hal-hal seperti
atau terserah...
Saya skeptis terhadap keseluruhan strategi "pastikan fungsinya". Satu-satunya nilai yang sah adalah fungsi atau falsy. Jika seseorang memasukkan angka bukan nol atau string tidak kosong, apa yang akan Anda lakukan? Bagaimana mengabaikan masalah menyelesaikannya?
sumber
save( { callback : confirmProfileSaved, priority: "low" })
Fungsi yang valid didasarkan pada prototipe Fungsi, gunakan:
untuk memastikan panggilan balik adalah sebuah fungsi
sumber
Jika kriteria untuk menjalankan callback adalah apakah itu ditentukan atau tidak, maka Anda baik-baik saja. Juga, saya sarankan untuk memeriksa apakah itu benar-benar fungsi tambahan.
sumber
Saya telah dengan tulus pindah ke skrip kopi dan menemukan argumen default adalah cara yang bagus untuk menyelesaikan masalah ini
sumber
Ini dapat dengan mudah dilakukan dengan ArgueJS :
sumber