2016-10-19 3 views
0

Ich habe Funktion A, die eine andere Funktion definiert B. B wird als argument zu einer anderen Funktion C zu handle event für die spätere Verwendung übergeben. Funktion B need data von function A. Ist es möglich, Daten auf diese Weise zu übertragen?Pass Daten von außerhalb Funktion in innerer Funktion für die spätere Verwendung

+0

Wie ist das Verhalten, wenn Sie es versuchen? –

+0

In Funktion B ist diese.blio nicht definiert. – TheChampp

+0

Welcher Code ruft den Aufruf von 'B()' auf? –

Antwort

0

Indem Sie B als Funktion auf diese Weise zuweisen, deklarieren Sie es im Wesentlichen als Konstruktor für eine neue Klasse. B.blio ist keine Eigenschaft des Objekts, sondern eine statische Eigenschaft für diese Klasse und kann daher nicht mit this referenziert werden.

Stattdessen sollten Sie eine Funktion für den Prototyp für die B-Klasse erstellen, die auf den gespeicherten Wert eines instanziierten Objekts zugreifen wird. Siehe das folgende Beispiel:

var o = [1,2,3]; 

var B = function() { 
    console.log("constructor called"); 
}; 

B.prototype.func = function() { 
    console.log(this.blio); 
} 

function A(){ 
    var b = new B();//instantiate new object 
    b.blio = o;//assign property to object 
    b.func();//call prototype function 
} 
0

Sie B Parameter A bestanden außer Kraft setzen funktionieren, wenn Sie

B = function() { 
    alert(this.blio); // data from A 
}; 

zuweisen und dann wieder Parameter B außer Kraft setzen, indem Sie versuchen eine Eigenschaft zuweisen (wie auf ein Objekt) eine Funktion

B.blio = o; 

Sie sollten dies versuchen:

function A(B){ 

    var o = [1,2,3]; 

    B.myfunc=function() 
    { 
     alert(this.blio); 
    }; 
    B.blio = o; //bind data in property to B 

$('selector').C({ result: B.myfunc()}); //handle event 

}

0

Lassen Sie uns über ein paar Dinge sprechen, die hier im Zusammenhang mit dem Umfang gehen.

function alpha(beta) { 
    this.foo = 42; 
    console.log('From inside alpha:', this.foo); 

    var beta = function() { 
     console.log('Form inside beta:', this.foo); 
    }; 

    beta(); 
} 

alpha(); 

Wenn Sie die Funktion alpha ausführen, diese ist eigentlich das global Fenster Objekt.

Wenn Sie den Code unten in der Konsole lief würden Sie sehen, dass die Alpha-Funktion, um die foo Eigenschaft Fenster und setzen Sie ihn auf 42.

console.log(window.foo); 

Vom Lesen der Kommentare nur hinzugefügt in Ihrem Code, mit dem Sie ein Ereignis behandeln, und können den aktuellen Wert, den Sie benötigen, als Datenspeicher abrufen. Der Schlüssel hierfür ist, dass Sie Zugriff auf den Bereich haben, in dem die erforderlichen Werte enthalten sind.

Geben Sie spezifischeren Code ein wäre auch hilfreich für hel Du bekommst eine bessere Antwort. Die Rolle aller verschachtelten Funktionen ist unklar.

Verwandte Themen