2009-07-23 4 views
4

Weitergabe von Variablen und Funktionen des aktuellen Bereichs an die anonyme Funktion in normalem JavaScript oder in jQuery (wenn dies für Frameworks spezifisch ist).Übergabe von jQuery/plainJS-Variablen/Funktionen eines aktuellen Bereichs an anonyme Funktion, die vom aktuellen Bereich aufgerufen wird

Zum Beispiel:

jQuery.extend({ 
    someFunction: function(onSomeEvent) { 
    var variable = 'some text' 
    onSomeEvent.apply(this); // how to pass current scope variables/functions to this function? 
    return null; 

    _someMethod(arg) { 
     console.log(arg); 
    } 
    } 
}); 

in Firebug alles von der Funktion oben einloggen Sollte:

jQuery.someFunction(function(){ 
    console.log(this.variable); // or console.log(variable); 
    console.log(this._someMethod(1); // or jQuery.someFunction._someMethod(2); 
}); 

Dank!

Antwort

3

Lesen Sie mehr über Scopes in JavaScript zum Beispiel:

var that = this; 

Dann Linie 4 ändern.

Im Java Script gibt es nur einen Bereich innerhalb von Funktionen. Wenn Sie Ihre Variable innerhalb der Funktion mit var angeben, können Sie von außerhalb dieser Funktion nicht darauf zugreifen. Dies ist eine Möglichkeit, private Variablen in JavaScript zu erstellen.

Sie können diese Variable verwenden, die auf das aktuelle Objekt zeigt, in dem Sie sich befinden (dies ist kein Bereich selbst). Aber! Wenn Sie die Funktion ohne neuen Befehl starten, wird dieser auf den äußeren Bereich zeigen (in den meisten Fällen ist es Fensterobjekt = globaler Bereich).

Beispiel:

function foo(){ 
    var a = 10; 
} 
var f = foo(); //there is nothing in f 
var f = new foo(); //there is nothing in f 

function bar(){ 
    this.a = 10; 
} 
var b = new bar(); //b.a == 10 
var b = bar(); //b.a == undefined, but a in global scope 

Btw Besuche Syntax der Methode anwenden Mozilla docs/apply So können Sie sehen, dass Faust Argument Objekt, das dieses wenn Ihre Methode aufgerufen werden wird.

So dieses Beispiel betrachten:

function bar(){ 
    console.log(this.a); 
    console.log(this.innerMethod(10)); 
} 

function foo(){ 
    this.a = 10; 
    this.innerMethod = function(a){ 
    return a+10; 
    } 

    bar.apply(this); 
} 

var f = new foo(); // => you will get 10 and 20 in the console. 
var f = foo(); // => you will still get 10 and 20 in the console. But in this case, your "this" variable //will be just a global object (window) 

Vielleicht ist es besser

var that = this; 

vor Anwendung Aufruf der Methode zu machen, aber vielleicht ist es nicht benötigt wird. nicht sicher

Also, das wird auf jeden Fall arbeiten:

function foo(){ 
    console.log(this.a); 
} 
jQuery.extend({ 
somefunc: function(func){ 
    this.a = 10; 
    func.apply(this); 
} 
}); 

$.somefunc(foo); //will print 10. 
0

Vor Zeile 1: in "Java Script: Die guten Teile"

onSomeEvent.apply(that); 
+0

Und wie Funktionen und Variablen nennen? Verwenden Sie diese.Variable? –

+0

Ist nicht Arbeit: http://gist.github.com/152649 –

+0

Simplefied: (Funktion() {var _this = das; var a = 2; console.log (_this.a);})(); - Wie bekomme ich eine Variable von einer anderen Variable, Hash oder ich weiß nicht was noch ... –