Ten rodzaj kodu jest zwykle generowany przez transpilatory (takie jak Babel), w celu konwersji nowoczesnego JavaScript - który korzysta z najnowszych dodatków do specyfikacji - na wersję JavaScript, która jest szerzej obsługiwana.
Oto przykład, w którym występuje ten wzór transpilacji:
Powiedzmy, że mamy ten oryginalny kod przed transpilacją:
import {myfunc} from "mymodule";
myfunc();
Aby kod ten był zgodny z ES5, możesz to zrobić:
"use strict";
var mymodule = require("mymodule");
mymodule.myfunc();
Ale tutaj wykonalibyśmy myfuncz mymoduleasthis wartości, która nie dzieje się w oryginalnym kodzie. I mimo, że może nie zawsze być problem, to lepiej, aby upewnić się, że zachowuje się funkcja podobnie jak miałoby to w oryginalnej wersji , nawet jeśli ta funkcja będzie używać thisReference - jak nietypowe lub nawet bezużyteczne, że stosowanie thisw myfuncmoże być ( ponieważ również w oryginalnej wersji byłoby undefined).
Na przykład, jeśli oryginalny kod this.memberFun()zgłasza błąd z powodu odwołania w funkcji, to również wrzuci transpilowaną wersję.
Tak więc operator przecinka służy do pozbycia się tej różnicy:
(0, mymodule.myfunc)();
To prawda, że w kodzie, który sam piszesz, nigdy nie miałbyś dobrego przypadku użycia dla tego wzorca, ponieważ nie byłby używany thisw myfuncpierwszej kolejności.
bindmetoda wiąże. To tylko zmiana kontekstu. Nie możesz wyciąć ani stracić wiązania (więź utworzona przezbind).