bind() doit renvoyer une copie de la fonction d'origine .. Cependant, lorsque vous passez cette copie en rappel, la fonction d'origine est appelée: . - (testé avec Chrome, Firefox et Edge Alors, où est mon erreur dans le raisonnementJavascript: l'événement n'appelle pas bind (..) - copie du rappel: -/
<html><body>
<script>
// new api to wrap these nested Cordova callbacks ..
ScanDir = function (sPath, rCallback, iStep){
yes = _Yes.bind(rCallback); // should return a copy/newInstance of _Yes !?!
yes.iStep = iStep;
// simulate a cordova callback ..
document.getElementById("test").addEventListener("click", yes);
}
_Yes = function YES(o){
// this is not the new instance returned by bind(..):
alert(_Yes.iStep); // = undefined
alert(YES.iStep); // = undefined
alert(arguments.callee.iStep); // = undefined
alert(yes.iStep); // wrong, 'yes' must not be global...
}
</script>
<span id="test">click here to trigger callback</span>
<script>
// code that uses my new api..
function Go(v){
if (!v.iStep) return ScanDir(v,Go,1);
alert("continue with switch("+v.iStep+")");
}
Go("Music/");
</script>
</body></html>
debug le code ici: http://www.robosoft.de/forums/bug.htm
Non, bind() crée une nouvelle fonction: https: //developer.mozilla. org/fr/docs/Web/JavaScript/Référence/Global_Objects/Fonction/bind. Et déjà le dernier 'alert (yes.iStep);' prouve que l'objet de fonction 'yes' (soumis comme callback) est un objet fonction différent. Pourquoi '_Yes = YES' est-il appelé quand' yes' a été fourni comme callback ??? Et oui, j'avais allredy déplacé avec votre soludion: '_Yes.bind ({" rCallback ": rCallback," iStep ": iStep})' - Encore je voudrais comprendre ce comportement étrange de l'exemple donné. –
@bornloser et avez-vous lu la section "description" ...? –
Eh bien, je ne comprends pas la signification de _ ** Description: ** La fonction bind() crée une nouvelle fonction liée (BF). Un BF est un objet fonction exotique (un terme d'ECMAScript 2015) qui enveloppe l'objet fonction d'origine. L'appel d'un BF aboutit généralement à l'exécution de sa fonction enveloppée._: -/Mon exemple prouve clairement deux optjects de fonction distincts 'yes' et' YES'. 'yes' est donné comme callback mais' YES' est appelé. Je pense que c'est bizarre. –