Jenis kode ini biasanya dihasilkan oleh transpiler (seperti Babel), untuk mengkonversi JavaScript modern - yang menggunakan tambahan spesifikasi terbaru - ke versi JavaScript yang lebih banyak didukung.
Berikut adalah contoh di mana pola transpilasi ini terjadi:
Katakanlah kita memiliki kode asli ini sebelum transpilasi:
import {myfunc} from "mymodule";
myfunc();
Untuk membuat kode yang kompatibel dengan ES5 ini, Anda dapat melakukan ini:
"use strict";
var mymodule = require("mymodule");
mymodule.myfunc();
Tetapi di sini kita akan mengeksekusi myfuncdengan mymodulesebagai thisnilai, yang tidak terjadi dalam kode asli. Dan meskipun itu mungkin tidak selalu menjadi masalah, lebih baik untuk memastikan fungsi berperilaku seperti itu dalam versi asli , bahkan jika fungsi itu akan menggunakan thisreferensi - seberapa tidak biasa atau bahkan tidak berguna penggunaan thisdalam myfuncmungkin ( karena juga dalam versi aslinya akan undefined).
Jadi misalnya, jika kode asli akan melempar kesalahan karena this.memberFun()referensi dalam fungsi, itu juga akan membuang dalam versi yang diubah.
Jadi begitulah operator koma digunakan untuk menyingkirkan perbedaan itu:
(0, mymodule.myfunc)();
Memang, dalam kode yang Anda tulis sendiri, Anda tidak akan pernah memiliki kasus penggunaan yang baik untuk pola ini, karena Anda tidak akan menggunakan thisdi myfuncdi tempat pertama.
bindmetode mengikat. Ini hanya perubahan konteks. Anda tidak dapat memotong atau kehilangan ikatan (ikatan dibuat olehbind).