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
}
};
} ();
5 Réponses :
faire quelque chose comme:
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
Ne connais pas la réponse directe, mais vous devez suivre.
Si vous souhaitez l'appeler, pourquoi ne pas structurer l'objet comme celui-ci: P> 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. var myObject = function() {
var p...
function private_method() {
another_object.public_method1()
}
var another_object = {
public_method1: function() {
....
}
}
return another_object;
}() ;
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();
Merci Peter, malheureusement, j'ai maintenant beaucoup de code pour réécrire le modèle que j'utilise surtout comme espace de noms.
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();