Saya mencoba untuk menyesuaikan pustaka JS yang ada tanpa mengubah kode JS asli. Kode ini dimuat dalam beberapa file JS eksternal yang saya miliki aksesnya, dan yang ingin saya lakukan adalah mengubah salah satu fungsi yang terdapat dalam file asli tanpa menyalin dan menempel semuanya ke dalam file JS kedua.
Jadi misalnya, JS terlarang mungkin memiliki fungsi seperti ini:
var someFunction = function(){
alert("done");
}
Saya ingin bisa entah bagaimana menambahkan atau menambahkan beberapa kode JS ke dalam fungsi itu. Alasan utamanya adalah bahwa dalam JS asli yang tidak tersentuh fungsinya sangat besar dan jika JS itu diperbarui, fungsi yang saya timpa akan kedaluwarsa.
Saya tidak sepenuhnya yakin ini mungkin, tetapi saya pikir saya akan memeriksanya.
javascript
merge
append
user-defined-functions
prepend
Munzilla
sumber
sumber
Jawaban:
Jika
someFunction
tersedia secara global, maka Anda dapat menyimpan fungsi tersebut, membuatnya sendiri, dan meminta Anda memanggilnya.Jadi jika ini yang asli ...
Anda akan melakukan ini ...
Ini biolanya
Perhatikan bahwa saya menggunakan
.apply
untuk memanggil fungsi yang di-cache. Ini memungkinkan saya mempertahankan nilai yang diharapkan darithis
, dan meneruskan argumen apa pun yang diteruskan sebagai argumen individu terlepas dari berapa banyak yang ada.sumber
apply
: ini adalah satu-satunya jawaban yang benar - benar menyelesaikan masalah.funciton
kata kunci JavaScript ? ;) Terima kasih atas pengeditannya.apply()
. Tetapi jika itu adalah objek mirip Array seperti objek jQuery misalnya, maka ya, beberapa browser akan membuat kesalahanpertama-tama simpan fungsi sebenarnya dalam variabel ..
lalu tentukan sendiri:
sumber
apply
untuk memanggilnya. Lihat jawaban saya.someFunction
denganwindow.someFunction
kode di atas. Alasannya karena fungsi saya dideklarasikan di dalam jquery$(document).ready()
handler.Anda dapat membuat fungsi yang memanggil kode Anda, dan kemudian memanggil fungsi tersebut.
sumber
Saya tidak tahu apakah Anda dapat memperbarui fungsi tersebut, tetapi bergantung pada bagaimana ini direferensikan, Anda dapat membuat fungsi baru sebagai gantinya:
sumber
Juga. Jika Anda ingin mengubah konteks lokal, Anda harus membuat ulang fungsi. Sebagai contoh:
Sekarang
Kemudian
Dan
Tapi ini hanyalah contoh paling sederhana. Masih banyak pekerjaan yang harus dilakukan untuk menangani argumen, komentar, dan nilai pengembalian. Selain itu, masih banyak jebakan.
toString | mengiris | indexOf | lastIndexOf | Fungsi baru
sumber
Pola proxy (seperti yang digunakan oleh user1106925) dapat dimasukkan ke dalam fungsi. Yang saya tulis di bawah ini berfungsi pada fungsi yang tidak dalam cakupan global, dan bahkan pada prototipe. Anda akan menggunakannya seperti ini:
Dalam cuplikan di bawah, Anda dapat melihat saya menggunakan fungsi untuk memperluas test.prototype.doIt ().
sumber