This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

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.
Als Lösung markieren 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...
Als Lösung markieren Zitieren


Gehe zu:


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