Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Frage zu bind und Standardwerten...
#1
Hi Leute,

folgendes Beispiel, bei dem ich nicht durchblicke...

function test(a, b=17, c=81, d="LLLL")
{
	console.log("a: "+a+" | b: "+b+" | c: "+c+" | d: "+d);
}

let kkk = test.bind(null,4);
document.querySelector("IRGENDWAS_HALT").addEventListener("click",kkk);

Der Code liefert mir folgende Ausgabe:
Zitat:a: 4 | b: [object MouseEvent] | c: 81 | d: LLLL


Ist sicherlich etwas einfaches, aber ich komme grad einfach nicht drauf, warum nicht der Standard von b verwendet wird...

Danke schonmal.
Zitieren
#2
Mit den Thema habe ich mich auch noch nicht so ichtig beschäftigt.
Hast du mal hier gelesen
https://developer.mozilla.org/de/docs/We...ction/bind


Ich würde dein Codeso machen.
var module = {
  b: 17,
  c:81,
  d:'llll',
  a:0,
};

function test(){
    console.log("a: "+this.a+" | b: "+this.b+" | c: "+this.c+" | d: "+this.d);
}

let kkk = test.bind(module);
document.querySelector("body").addEventListener("click",kkk);

Welcher Weg der bessere ( richtigerer ) ist weiß ich auch nicht.
Werde mich aber mal einlesen.
Zitieren
#3
Danke admin.

Ja, ich habe schon bei der bind-Doku nachgeschaut, aber nichts gefunden, was das konkret erklären würde.

Dein Vorschlag wärde ne Möglichkeit, ist aber nicht so bequem und vergrößert den Code deutlich vor allem, wenn
man bind häufiger so nutzen will.

Scheint so, als würde bei bind das Event-Objekt als letzter Parameter übergeben und dabei aber nur
die Anzahl an Argumenten, nicht aber die Anzahl an Parametern der eigentlichen Funktion beachtet werden.

So ist es ja auch logisch, bedeutet aber dann wohl auch, das man bei der zu bindenen Funktion immer alle
Parameter setzen muss. Möchte man dann die Standardwerte verwenden, so muss man bei bind an der entsprechenden
Stelle "undefind" setzen.

Mit anonymen- oder Pfeilfunktionen geht das jedoch ohne Probleme:
...
let kkk = function(){test(4);}
let ppp = () => {test(4);}

document.querySelector("IRGENDWAS_HALT").addEventListener("click",kkk);
document.querySelector("IRGENDWAS_HALT").addEventListener("click",ppp);

Hatte mich nur bei bind gewundert und daher mal in die Runde gefragt...
Zitieren


[-]
Schnellantwort
Nachricht
Geben Sie hier Ihre Antwort zum Beitrag ein.

 

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste