2010-07-05 7 views
2

je la fonction anonyme suivante:javascript champ de fonction anonyme

(function() { 
var a = 1; 
var b = 2; 

function f1() { 
} 

function f2() { 
} 

// this => window object! 
// externalFunction(this); 
})(); 

function externalFunction(pointer) { 
// pointer.f1(); => fail! 
} 

Je dois appeler une fonction externe de cette fonction anonyme et le transmettre est le pointeur d'appeler des fonctions f1 & f2. Mais je ne peux pas faire cela, car cela fait référence à l'objet fenêtre au lieu de la portée interne.

Je peux définir la fonction que:

this.f1 = function() {} 

mais il est mauvaise idée, car ils seront dans l'espace mondial ...

Comment je peux passer un espace anonyme à la fonction externe?

Répondre

9

Je me demande encore pourquoi vous feriez fonctions à être privées, qui sont nécessaires à l'extérieur ... Mais là, vous allez:

(function() { 
    var a = 1; 
    var b = 2; 

    var obj = { 
    f1: function() { 
    }, 
    f2: function() { 
    } 
    } 

    externalFunction(obj); 
})(); 

function externalFunction(pointer) { 
    pointer.f1(); // win 
} 

Ou vous pouvez passer f1 et f2 individuellement, alors vous ne besoin de les mettre dans un objet.

+0

Oui, vous droit, le son étrange, mais je besoin de ce comportement. –

3

Vous ne pouvez pas passer la portée comme un objet, mais vous pouvez créer un objet avec tout ce que vous voulez du champ d'application:

externalFunction({ f1: f1, f2: f2 }); 
Questions connexes