• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Bibliotheksfunktion schreiben (theoretisch)

yuro

New member
Hi Leute,

Also ich hab mal eine Aufgabe, wo lücken zu füllen sind und bei manchen weiss ich nicht weiter.
Wäre super wenn ihr mir helfen könntet.

Für die Aufrufe der Bibliotheksfunktionen sollen Funktionsverkettungen möglich sein, wie z.B.
Aufruf-Beispiel 1: mystack.debug().push('a').push('b').pop().debug(); zeige [ ] und [a] an.

Aufruf-Beispiel 2: mystack.reset().push(3).push(4).each(function(el){return el*el;}).debug(); zeige [9, 16] an.

Aufruf-Beispiel 3: mystack.reset().set(0,0).add(5).add(6).debug(); zeige [11] an.

a) Damit die Funktionsverkettungen möglich werden, soll an allen Stellen /* 1 */ der Code return this eingesetzt werden.

b) Die Funktion reset() bei /* 2 */ soll den Array arr "leer initialisieren".

c) Bei /* 3 */ soll der Variablenwert v auf den privaten Array arr "gepushed" werden.

d) Bei /* 4 */ soll auf jedes Element von arr eine Funktion fn angewendet werden. Der aktuelle fn-Rückgabewert überschreibt das aktuelle arr-Element.

e) Bei der Funktion set(val, idx), bei /* 5 */ soll idx mit den Index-Grenzen überprüft werden.

f) Fehlt bei /* 6 */ bei einem Aufruf von add(val, idx) der idx-Paramter, wie z.B. bei add(4711), so soll idx = 0 verwendet werden.

g) Bei /* 7 */ bei der Funktion debug() soll jeweils zwischen alle arr-Elemente ein String ', ' einfügt werden und aus arr ein "Gesamt-String" erstellt werden, der in einer alert-Box angezeigt wird.

Code:
      var mystack = (function() {

       var i, arr = [ ]; 

       function reset() { [B]arr = [];[/B]/* 2 */  /* 1 */ }

       function push(v) { [B]arr.push();[/B]/* 3 */  /* 1 */ }

       function pop()   { arr.pop();             /* 1 */ }

       function each(fn) {              /* 4 */
         for( i = 0; i < arr.length; i += 1) {
		[B]arr[i] = fn;[/B]
           
         }                                       /* 1 */
       }

       function set(val, idx) {         /* 5 */

         ________________________________________________ 
         arr[idx] = val;                         /* 1 */
       }

       function add(val, idx) {         /* 6 */

           ______________________________________________
         arr[idx] += val;                        /* 1 */
       }

       function debug() {               /* 7 */

         alert('['+[B]arr[idx][/B]+']'); /* 1 */ 
       }

       return { set   : set,   // val in idx-Element
                reset : reset, // privaten Array leeren
                push  : push,
                pop   : pop,
                each  : each,  // auf jedem Element fn ausführen
                add   : add,   // Zahlen/Strings auf idx 
                debug : debug  // anzeigen des privaten Array
        };
      }());

Hab mal die Sachen, die ich ausgefüllt habe fett hervorgehoben. Wäre super dankbar für eure Hilfe :)
 
Hm, dann schau dir mal an, wie die Funktionssignaturen der entsprechenden Array-Methoden aussehen, da liegt bei dir einiges im Argen.

die Methode add() macht auch String-Verkettung, wenn du nicht aufpaßt (je nachdem, was beabsichtigt ist). Zusätzlich ergibt der + Operator nicht mit jedem Variablentyp Sinn (z.B. HTML-Objekte).

für debug() solltest du console.log() verwenden, nicht alert().
 
Du hast auch in keine Funktion das return this; eingebaut...

PS: in der each-Funktion musst du die Funktion schon aufrufen. So weist du den Einträgen einfach nur die Funktion zu...
PPS: in der Aufgabenstellung wird add() ohne zweiten Parameter aufgerufen - das fängst du überhaupt gar nicht auf.
 
Zurück
Oben