Ada pintasan siap pakai (gula sintaksis) ke fungsi wrapper @CMS dijawab dengan. (Di bawah ini dengan asumsi bahwa konteks yang Anda inginkan adalah this.tip
.)
Jika Anda menargetkan browser yang kompatibel dengan ECMA-262, edisi ke-5 (ECMAScript 5) atau Node.js , Anda dapat menggunakannya Function.prototype.bind
. Anda bisa memberikan argumen fungsi apa pun untuk membuat fungsi parsial .
fun.bind(thisArg[, arg1[, arg2[, ...]]])
Sekali lagi, dalam kasus Anda, coba ini:
if (this.options.destroyOnHide) {
setTimeout(this.tip.destroy.bind(this.tip), 1000);
}
Fungsionalitas yang sama juga telah diterapkan di Prototipe (ada perpustakaan lain?).
Function.prototype.bind
dapat diimplementasikan seperti ini jika Anda ingin kompatibilitas mundur kustom (tapi harap perhatikan catatan).
Untuk pengembangan mutakhir (2015), Anda dapat menggunakan fungsi panah gemuk , yang merupakan bagian dari spesifikasi ECMAScript 2015 (Harmony / ES6 / ES2015) ( contoh ).
Sebuah ekspresi panah fungsi (juga dikenal sebagai fungsi panah lemak ) memiliki sintaks yang lebih pendek dibandingkan dengan ekspresi fungsi dan leksikal mengikat this
nilai [...].
(param1, param2, ...rest) => { statements }
Dalam kasus Anda, coba ini:
if (this.options.destroyOnHide) {
setTimeout(() => { this.tip.destroy(); }, 1000);
}
Jika Anda sudah menggunakan jQuery 1.4+, ada fungsi yang sudah jadi untuk mengatur this
konteks fungsi secara eksplisit .
jQuery.proxy () : Mengambil fungsi dan mengembalikan yang baru yang akan selalu memiliki konteks tertentu.
$.proxy(function, context[, additionalArguments])
Dalam kasus Anda, coba ini:
if (this.options.destroyOnHide) {
setTimeout($.proxy(this.tip.destroy, this.tip), 1000);
}
Ini tersedia di Underscore.js, serta lodash, seperti _.bind(...)
1 , 2
bind Mengikat fungsi ke objek, artinya setiap kali fungsi dipanggil, nilaithis
akan menjadi objek. Secara opsional, ikat argumen ke fungsi untuk mengisinya terlebih dahulu, juga dikenal sebagai aplikasi parsial.
_.bind(function, object, [*arguments])
Dalam kasus Anda, coba ini:
if (this.options.destroyOnHide) {
setTimeout(_.bind(this.tip.destroy, this.tip), 1000);
}
mengikat jquery underscore.js ecmascript-5 prototypejs node.js