12
votes

JavaScript appelant la méthode publique de Privé un dans le même objet

Puis-je appeler la méthode publique de l'une de l'intérieur privé:

var myObject = function() {
   var p = 'private var';
   function private_method1() {
      //  can I call public method "public_method1" from this(private_method1) one and if yes HOW?
   }

   return {
      public_method1: function() {
         // do stuff here
      }
   };
} ();


0 commentaires

5 Réponses :


15
votes

faire quelque chose comme: xxx


3 commentaires

Merci pour votre réponse rapide, puis-je mettre plus d'une méthode dans la variable publique, j'ai essayé votre modèle mais j'ai des erreurs de Sintax


Merci, mais dans mon code refuse d'être traité comme un, (je dois le déboguer. Merci encore et merci à Daniel d'explication


Je l'ai fait travailler, merci à tout le monde, j'ai accepté "baroquebobcat" principalement parce qu'il était le premier, mais la réponse de Daniel était plus complète



0
votes

Ne connais pas la réponse directe, mais vous devez suivre. XXX


0 commentaires

3
votes

public_method1 code> n'est pas une méthode publique. C'est une méthode sur un objet anonyme construit entièrement dans l'énoncé de retour de votre fonction de constructeur.

Si vous souhaitez l'appeler, pourquoi ne pas structurer l'objet comme celui-ci: P>

var myObject = function() {
    var p...
    function private_method() {
       another_object.public_method1()
    }
    var another_object = { 
        public_method1: function() {
            ....
        }
    }
    return another_object;
}() ;


0 commentaires

14
votes

Pourquoi ne pas faire cela comme quelque chose que vous pouvez instancier?

function Whatever()
{
  var p = 'private var';
  var self = this;

  function private_method1()
  {
     // I can read the public method
     self.public_method1();
  }

  this.public_method1 = function()
  {
    // And both test() I can read the private members
    alert( p );
  }

  this.test = function()
  {
    private_method1();
  }
}

var myObject = new Whatever();
myObject.test();


1 commentaires

Merci Peter, malheureusement, j'ai maintenant beaucoup de code pour réécrire le modèle que j'utilise surtout comme espace de noms.



2
votes

Cette approche n'est-elle pas souhaitée? Je ne suis pas sûr que

var klass = function(){
  var privateMethod = function(){
    this.publicMethod1();
  }.bind(this);

  this.publicMethod1 = function(){
    console.log("public method called through private method");
  }

  this.publicMethod2 = function(){
    privateMethod();
  }
}

var klassObj = new klass();
klassObj.publicMethod2();


0 commentaires