Apakah ada cara untuk membuat fungsi mengeluarkan pernyataan console.log ketika dipanggil dengan mendaftarkan hook global di suatu tempat (yaitu, tanpa mengubah fungsi sebenarnya itu sendiri) atau melalui cara lain?
97
Apakah ada cara untuk membuat fungsi mengeluarkan pernyataan console.log ketika dipanggil dengan mendaftarkan hook global di suatu tempat (yaitu, tanpa mengubah fungsi sebenarnya itu sendiri) atau melalui cara lain?
Jawaban:
Berikut cara untuk menambah semua fungsi di namespace global dengan fungsi pilihan Anda:
Satu sisi negatifnya adalah bahwa tidak ada fungsi yang dibuat setelah pemanggilan
augment
akan memiliki perilaku tambahan.sumber
fn.apply(this, arguments);
menjadireturn fn.apply(this, arguments);
return
ke fungsi paling dalam.Bagi saya, ini terlihat seperti solusi paling elegan:
sumber
Metode Proksi untuk mencatat panggilan Fungsi
Ada cara baru menggunakan Proxy untuk mencapai fungsi ini di JS. berasumsi bahwa kita ingin memiliki
console.log
fungsi kapan pun dari kelas tertentu dipanggil:kita dapat mengganti instance kelas kita dengan Proxy yang mengganti setiap properti kelas ini. begitu:
periksa apakah ini benar-benar berfungsi di Codepen
Ingatlah bahwa menggunakan
Proxy
memberi Anda lebih banyak fungsi daripada hanya mencatat nama konsol.Juga metode ini berfungsi di Node.js juga.
sumber
Jika Anda ingin logging lebih bertarget, kode berikut akan mencatat panggilan fungsi untuk objek tertentu. Anda bahkan dapat memodifikasi prototipe Object sehingga semua instance baru juga dapat masuk. Saya menggunakan Object.getOwnPropertyNames dan bukan untuk ... in, jadi ia bekerja dengan kelas ECMAScript 6, yang tidak memiliki metode enumerable.
sumber
Berikut beberapa Javascript yang menggantikan menambahkan console.log ke setiap fungsi di Javascript; Mainkan di Regex101 :
Ini adalah 'peretasan cepat dan kotor' tetapi menurut saya berguna untuk debugging. Jika Anda memiliki banyak fungsi, berhati-hatilah karena ini akan menambah banyak kode. Selain itu, RegEx sederhana dan mungkin tidak berfungsi untuk nama / deklarasi fungsi yang lebih kompleks.
sumber
Anda sebenarnya dapat melampirkan fungsi Anda sendiri ke console.log untuk semua yang dimuat.
sumber