2016-08-14 6 views
0

ich diese ursprüngliche Funktion haben:Löschen Funktionen über AJAX neu hinzugefügt

<script> 
function f(x){..} 
function z(x){..} 
... 
</script> 

werden über AJAX später Diese neuen Funktionen geladen:

<script> 
function xyz(){..} 
windows.abc(){..} 
... 
</script> 

Wie lösche ich alle Funktionen in der "this" binded und "Windows" Scope mit Ausnahme der ursprünglichen (in diesem Fall f (x), z (x)). Ich brauche das, um dynamisch zu sein, was bedeutet, dass ich keine Ahnung habe, was die neuen Funktionen sein werden, außer dass sie an den Bereich "this" und "windows" gebunden werden. Ich denke darüber nach, die ursprünglichen Funktionsnamen zu speichern und diese nicht während einer Schleife zu löschen.

+0

Kann eine der ursprünglichen Funktionen überschrieben werden? Zum Beispiel haben Sie eine Funktion namens 'abc' und Sie laden auch eine Funktion namens' abc', also überschreibt es die erste? – vlaz

+0

Hallo zur Einfachheit nein es ist noch nicht geschrieben – jfet93

Antwort

0

Ich bin mir nicht sicher, was der Kontext ist, aber vermeiden Sie die Verschmutzung des globalen Geltungsbereichs mit anderen Werten.

Shop eine Reihe von Ihren aktuellen globalen Funktionen:

// Collect existing functions into an object 
// It will look like this: { f: 1, z: 1 } 
var funcs = {}; 
Object.keys(window).filter(function (c) { 
    typeof window[c] === "function" && (funcs[c] = 1); 
}); 

// Load new stuff 
$.ajax(..., function() { 
    // After loading it, delete the functions that didn't exist before 
    Object.keys(window).forEach(function (c) { 
     typeof window[c] === "function" && !funcs[c] && delete window[c]; 
    }); 
}); 
Verwandte Themen