J'ai une fonction «alpha», et il y a une autre fonction «beta» à l'intérieur. Si je ne renvoie pas la version bêta en alpha, alors comment accéder à la version bêta. Y a-t-il une manière de faire ça? (Comme, je peux accéder à l'écriture alpha window.alpha (), car dans le contexte global, alpha devient une propriété de l'objet window, alors comment accéder à la beta en tant que propriété, via l'arborescence dom de la fenêtre)?

<html>
<head></head>
<body>

<script>

function alpha() { 
  console.log("hi");
  function beta() {
    console.log("hello");
  } 
} 
alpha(); //works 
window.alpha(); //works
beta(); //it is directly not accessible. How to access it if alpha does not return it

</script>

</body>
</html>

Alpha () est dans Window Dom mais pourquoi pas beta? (Même pas dans alpha)

enter image description here

1
Deadpool 12 avril 2018 à 10:30

4 réponses

Meilleure réponse

Normalement, vous ne pouvez pas faire cette chose non plus, vous pouvez préférer ces options, mais dans celles-ci, vous devez appeler alpha une fois pour obtenir la version bêta

// première option

(function alpha() { 
  console.log("hi");
  function beta() {
    console.log("hello");
  } 
  window.beta = beta;
})() 

//deuxième option

Utilisez this pour créer beta comme propriété dans alpha

function alpha() {
  this.beta = function() {
    console.log("hello");
  }
}
let alphaObject = new alpha();
alphaObject.beta();
3
Nishant Dixit 12 avril 2018 à 07:37

Si vous ne voulez pas retourner beta, vous pouvez retourner this et définir beta comme this.beta:

Pour accéder à beta(), il vous suffit d'appeler alpha().beta() .

function alpha() {
  console.log("hi");

  this.beta = () => {
    console.log("hello");
  }

  return this;
}

alpha().beta();
2
Zenoo 12 avril 2018 à 07:32

Déclarez beta en tant que membre de alpha en utilisant this:

function alpha() {
  console.log("hi");

  this.beta = function() {
    console.log("hello");
  }
}

let a = new alpha();
a.beta();

Votre implémentation actuelle empêche JavaScript d'accéder à beta depuis l'extérieur de alpha. En savoir plus sur les fonctions privées en JavaScript.

En utilisant this, vous pouvez réellement attacher de telles méthodes aux instances de la fonction alpha. C'est ce que j'ai fait dans cette solution.

1
31piy 12 avril 2018 à 07:33

La méthode beta () est privée pour fonctionner en alpha. Le fonctionnement de la portée de Javascript vous empêche d'accéder directement aux fonctions internes. Créez-le en tant que propriété d'alpha en utilisant this.beta

2
Jeson Dias 12 avril 2018 à 07:49