2011-02-14 7 views

Répondre

3

Donnez le paramètre un nom différent:

function Foo() { 
     var myPrivateBool = false, 
      myOtherVar; 
     this.bar = function(param) { 
      myPrivateBool = true; 
      myOtherVar = param; 
     }; 
     this.baz = function() { 
      alert(myOtherVar); 
     }; 
    } 


var inst = new Foo; 

inst.bar("new value"); 

inst.baz(); // alerts the value of the variable "myOtherVar" 

http://jsfiddle.net/efqVW/


Ou créer une fonction privée pour définir la valeur si vous préférez.

function Foo() { 
    var myPrivateBool = false, 
     myOtherVar; 
    function setMyOtherVar(v) { 
     myOtherVar = v; 
    } 
    this.bar = function(myOtherVar) { 
     myPrivateBool = true; 
     setMyOtherVar(myOtherVar); 
    }; 
    this.baz = function() { 
     alert(myOtherVar); 
    }; 
} 


var inst = new Foo; 

inst.bar("new value"); 

inst.baz(); 

http://jsfiddle.net/efqVW/1/

+1

Je craignais que cela doive l'être = (je suppose que c'est une faille de js – Garrett

+0

@Garrett: Oui, les paramètres formels dans la fonction 'bar' seront plus proches dans la chaîne de portée que les variables du constructeur – user113716

+0

@Garrett : Je suppose que vous pourriez créer une fonction privée pour définir la valeur, mais je ne suis pas sûr que ce soit ce que vous voulez – user113716

-2

Essayez this.myOtherVar = myOtherVar;

+3

Ce définit une propriété, pas une variable. – user113716

+1

est-ce que ça en fait un membre public? – Garrett

-1

Je pense this.myOthervar = myOtherVar; corrompra l'espace de noms global et créé une window.myOtherVar variable objet fenêtre

+0

OP utilise le 'Foo' comme constructeur, donc quand le constructeur est appelé (en tant que constructeur),' this' référencera le nouvel objet en cours de création. – user113716

-2

Peut-être que vous pouvez déclarer myOtherVar comme MyOtherVar, en profitant de la sensibilité de cas de javascript, puis attribuez-lui dans la fonction MyOtherVar = myOtherVar:

function Foo() { 
    var MyPrivateBool = false, 
     MyOtherVar; 
    this.bar = function(myOtherVar) { 
     MyPrivateBool = true; 
     MyOtherVar = myOtherVar; 
    }; 
} 
+0

Ceci est une mauvaise pratique car les noms des majuscules sont pour Classes par convention, par exemple: Objet, Date, Math, Personne, Véhicule, etc. – igor

Questions connexes