2009-07-23 7 views
4

Comment passer les variables et fonctions d'oscilloscope actuelles à la fonction anonyme en Javascript simple ou en jQuery (si elle est spécifique aux frameworks).Transférer les variables/fonctions jQuery/plainJS d'une portée courante vers une fonction anonyme appelée depuis la portée actuelle

Par exemple:

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); 
    } 
    } 
}); 

doit se connecter tout Firebug de la fonction ci-dessus:

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

Merci!

Répondre

3

Lisez à propos Scopes en JavaScript par exemple dans "Java Script: Les bonnes parties".

Dans le script Java, il n'y a que la portée dans les fonctions. Si vous spécifiez votre variable à l'intérieur de la fonction avec var vous ne pouvez pas y accéder depuis l'extérieur de cette fonction. C'est moyen de rendre les variables privées en JavaScript.

Vous pouvez utiliser cette variable, pointant vers l'objet actuel dans lequel vous vous trouvez (il ne s'agit pas d'une étendue). Mais! Si vous démarrez la fonction sans la commande nouvelle, cette pointera vers la portée externe (dans la plupart des cas c'est l'objet window = portée globale).

Exemple:

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, consultez la syntaxe de méthode apply Mozilla docs/apply Ainsi, vous pouvez voir, cet argument de poing est l'objet, qui sera ce lorsque votre méthode sera appelée.

considèrent donc cet exemple:

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) 

Peut-être qu'il est préférable de faire

var that = this; 

avant d'appeler méthode apply, mais peut-être ce n'est pas nécessaire. pas sûr

Donc, cela va certainement travailler:

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

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

Avant la ligne 1:

var that = this; 

changer ensuite la ligne 4:

onSomeEvent.apply(that); 
+0

Et comment appeler des fonctions et des variables? En utilisant this.variable? –

+0

Ne fonctionne pas: http://gist.github.com/152649 –

+0

Simplefied: (function() {var _this = ceci; var a = 2; console.log (_this.a);})(); - comment obtenir une variable d'une autre variable, hash ou je ne sais pas quoi d'autre ... –