2016-07-30 12 views
1

Ich habe das folgende Szenariowie ein Javascript-Verschluss-Funktionsaufruf außer Kraft zu setzen

var bar = (function() { 

    function foo() { 
    console.log("Hello World"); 
    } 

    function bar() { 
    foo(); 
    } 

    return bar; 
}()); 
// override foo before the call 
bar(); 

Da foo von der Bar-Funktion aufgerufen wird, die aus dem Innern derdiedas einem Verschlusses zurückgeführt wird, kann davon ausgegangen wird, dass foo wie wirkt ein privates Eigentum.

Ich möchte wissen, ob es möglich ist, die foo Funktion zu überschreiben, bevor die bar aufgerufen wird? Wie viele Wege kann es erreicht werden?

Hier ist etwas, das versucht wird, aber ich konnte das Ergebnis nicht erreichen.

var bar = (function() { 

    function foo() { 
    console.log("Hello World"); 
    } 

    function bar() { 
    foo(); 
    } 

    return bar; 
}()); 

var _bar = (function() { 
    function foo() { 
    console.log("Hey there"); 
    } 
    return bar; 
}()); 

_bar(); 

Antwort

2

Ich möchte wissen, wenn es möglich ist, die foo Funktion außer Kraft zu setzen, bevor die Bar genannt wird? Wie viele Möglichkeiten gibt es?

Nein, nicht und/behalten Sie die aktuelle Funktionalität von bar. Sie könnten bar vollständig ersetzen, aber das ist nicht besonders nützlich.

foo ist vollständig privat zu dem Kontext, in dem es erstellt wurde. bar hat Zugriff darauf, aber sonst nichts (gut, okay, foo hat Zugriff auf selbst). Es gibt keine Möglichkeit, in den Ausführungskontext zu gelangen bar schließt sich und ändert seine foo Bindung, es sei denn, etwas explizit aktiviert das, was nichts in Ihrem Beispiel tut.

Verwandte Themen