Karena penasaran tetapi masih tidak dapat menemukan jawaban untuk topik kinerja dari pertanyaan di atas, saya menulis inti dari nodejs ini untuk menguji kinerja dan keandalan semua solusi yang disajikan (dan diberi skor).
Saya telah membandingkan waktu dinding pembuatan fungsi klon dan eksekusi klon. Hasil bersama dengan kesalahan pernyataan disertakan dalam komentar inti.
Ditambah dua sen saya (berdasarkan saran penulis):
clone0 sen (lebih cepat tapi lebih jelek):
Function.prototype.clone = function() {
var newfun;
eval('newfun=' + this.toString());
for (var key in this)
newfun[key] = this[key];
return newfun;
};
clone4 cent (lebih lambat tetapi bagi mereka yang tidak menyukai eval () untuk tujuan yang hanya diketahui oleh mereka dan leluhur mereka):
Function.prototype.clone = function() {
var newfun = new Function('return ' + this.toString())();
for (var key in this)
newfun[key] = this[key];
return newfun;
};
Adapun kinerjanya, jika eval / Fungsi baru lebih lambat dari solusi pembungkus (dan itu benar-benar tergantung pada ukuran tubuh fungsi), itu memberi Anda klon fungsi telanjang (dan maksud saya klon dangkal sejati dengan properti tetapi status tidak dibagikan) tanpa fuzz yang tidak perlu dengan properti tersembunyi, fungsi pembungkus, dan masalah dengan tumpukan.
Selain itu, selalu ada satu faktor penting yang perlu Anda pertimbangkan: semakin sedikit kode, semakin sedikit tempat untuk kesalahan.
Kelemahan dari penggunaan fungsi eval / baru adalah bahwa fungsi klon dan asli akan beroperasi dalam cakupan yang berbeda. Ini tidak akan berfungsi dengan baik dengan fungsi yang menggunakan variabel cakupan. Solusi yang menggunakan pembungkusan seperti ikatan tidak bergantung pada cakupan.