2016-06-17 15 views
0

Ich bin ziemlich neu in Javascript und schreibe eine Chrome-Erweiterung, die den "Klick" Funktionsaufruf in einer Liste von E-Mails auf einer E-Mail-Website kompensiert. Mein Problem ist, dass die Funktionen, die ich versetze, durch Verweis weitergegeben werden, was dazu führt, dass sie schließlich alle auf ein einzelnes Klickereignis verweisen.Wie man eine "tiefe" Kopie einer Funktion macht - Javascript

Mein Code:

//Offsets the email links 
for (var i = emails.length - 1; i >= amountToRemove; i--) { 
    var a = emails[i]; 
    var b = emails[i - amountToRemove]; 

    a.addEventListener('click', (x) => {b.click(); x.stopPropagation(); return false;})  
} 

Und ein wenig Ausarbeitung des Problems: dh. sagen Sie mengeToRemove ist 2 und i = 10; die ersten beiden "shifts" von click() - Ereignissen funktionieren gut, aber in der 3. Schicht verweist die click() - Funktion für das 9. (letzte) und das 7. Objekt im Array auf dieselbe Funktion, was nicht beabsichtigt war. Ich habe versucht, eine „tiefe Kopie“ der Funktion macht ohne Erfolg mit

JSON.parse(JSON.stringify(object)) 

sowie andere Methoden, die von dem Internet empfohlen.

Meine Frage ist, gibt es eine Möglichkeit, eine "tiefe" Kopie der .click() - Funktionen, so dass sie nicht auf das gleiche Objekt zeigen und jedes Klickereignis auf den gleichen einzelnen Klick zeigen Veranstaltung?

Antwort

0

Es scheint, als ob Ihr Problem nicht eine "tiefe" Kopie der Funktionen benötigt. Stattdessen denke ich, dass Ihr Problem darin besteht, dass wenn Sie auf die 9. E-Mail klicken, löst dies einen Klick auf die 7. E-Mail aus, die dann einen Klick auf die 5. E-Mail auslöst. Ein etwas hacky Weg zu tun, was Sie wollen, wäre:

Aber das Verhalten, das Sie versuchen zu erreichen, scheint ein bisschen seltsam. Vielleicht könnten Sie uns sagen, warum Sie das tun wollen, falls Sie etwas anderes tun können, das einfacher und robuster ist.

Verwandte Themen