• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wywołanie publicznej funkcji z prywatnej funkcji w literale JavaScript

0 głosów
389 wizyt
pytanie zadane 2 stycznia 2018 w JavaScript przez kevin Mądrala (5,010 p.)

Witam!

      Mam pytanie odnośnie literału w języku JavaScript, a dokładniej to w jaki sposób wywołać z prywatnej funkcji publiczną funkcję. Dla przykładu napisałem kawałek prostego kodu który działa tylko pytanie czy to się tak robi i czy nie ma innego sposobu ? Wyjaśniając dokładniej to w części prywatnej tworzę zmienną i przypisuję do niej null ( to jest wskaźnik na funkcję w części publicznej ). W części publicznej piszę funkcję np. init i w niej przypisuję do tej zmiennej this.moja_funkcja i dzięki temu w części prywatnej mogę korzystać z funkcji w części publicznej. Tylko wada tego rozwiązanie jest taka że muszę wywołać funkcję init aby tą funkcję zapisać to zmiennej w części prywatnej, nie może to się dziać automatycznie ? Nie istnieje żaden konstruktor ?

var simple = ( function () {
  
  var bind_publiczna_funkcja = null;
  var prywatna_zmienna = 5;
  
  function prywatna_funkcja () {
  	bind_publiczna_funkcja ();
  }

  return {
    
    publiczna_funkcja: function () {
        alert("dziala !");
    },
  
  	init: function () {
      bind_publiczna_funkcja = this.publiczna_funkcja;
    },

		start: function () {
    	prywatna_funkcja();
    }
 }
})();

simple.init();
simple.start();

Kiedy jest mi lepiej napisać obiekt a kiedy literał ?

4 odpowiedzi

0 głosów
odpowiedź 3 stycznia 2018 przez Schizohatter Nałogowiec (39,700 p.)

Generalnie tak się to robi, ale proponuję zdefiniować funkcję publiczną tak samo, jak zdefiniowałeś prywatną, a dopiero ją "wystawić" na publikę poprzez return {}.

pseudokod:

a = iife
--- function private_function () {}
--- function public_function () {}
--- return { public_function }

a.public_function()

Wtedy nie będziesz miał tego problemu.

 

komentarz 3 stycznia 2018 przez kevin Mądrala (5,010 p.)

O w taki sposób ?

var simple = ( function () {
   
  function prywatna_funkcja () {
    alert("prywatna funkcja !");
  }
 
  function start () {
  	prywatna_funkcja ();
  }
  return { start }
})();
 
simple.start();

 

To jest w 100% poprawne ? Czy istnieje jakaś konwencja by zmienne czy funkcje w tym literale poprzedzać znakiem _ ? Aby od razu można było się zorientować że te zmienne należą do literału ? np. var _privCount; function _privHide (); ?

0 głosów
odpowiedź 3 stycznia 2018 przez kevin Mądrala (5,010 p.)

O w taki sposób ?

var simple = ( function () {
   
  function prywatna_funkcja () {
    alert("prywatna funkcja !");
  }
 
  function start () {
  	prywatna_funkcja ();
  }
  return { start }
})();
 
simple.start();

To jest w 100% poprawne ?

2
komentarz 3 stycznia 2018 przez Schizohatter Nałogowiec (39,700 p.)
Tak, to jest poprawne. Jeśli będziesz używać jakiegoś bundlera modułów, to on też coś podobnego robi, jeśli wybierzesz tryb IIFE.

A propos tego, co napisałeś w komentarzu: niektórzy używają _ jako oznaczenia prywatnych metod, ale to w przypadku, kiedy i "prywatne", i publiczne metody są udostępniane razem. Nie jest to oficjalna konwencja. W nowym standardzie pojawiły się wzmianki o oznaczeniu prywatnych metod (tym razem naprawdę prywatnych), ale do tego jeszcze długa droga.
0 głosów
odpowiedź 4 stycznia 2018 przez kap Stary wyjadacz (11,700 p.)
Z czystej ciekawości - masz jakiś konkretny przykład? Bo wołanie publicznej metody z metody prywatnej bardzo często oznacza code smell.
0 głosów
odpowiedź 26 kwietnia 2018 przez kevin Mądrala (5,010 p.)

Dobra a co jeżeli mam taki kod: 

var simple = ( function () {
    
  function prywatna_funkcja () {
    alert("prywatna funkcja !");
  }
  
  function start () {
    prywatna_funkcja ();
  }
  return { start }
})();
  
simple.start();

I chcę aby ten literał bym w jednym pliku który jest dołączany do projektu poprzez plik główny tzn. taki który posiada tylko i wyłącznie instrukcje import do innych plików.

import './moj_literal.js';
import './jakisplik.js';

import './wazny_plik.js'; <- w tym pliku chcę użyć literału z moj_literal.js

Czy to tak działa że będę mógł użyć literału z moj_literal.js w pliku wazny_plik.js ? Dodam że dołączam do strony tylko ten plik który zawiera import '' innych plików.

Podobne pytania

+1 głos
3 odpowiedzi 195 wizyt
pytanie zadane 17 stycznia 2016 w C i C++ przez secsec Mądrala (7,280 p.)
0 głosów
0 odpowiedzi 60 wizyt
pytanie zadane 17 czerwca 2020 w JavaScript przez Uwaciusz Nowicjusz (140 p.)
0 głosów
1 odpowiedź 80 wizyt
pytanie zadane 24 maja 2017 w JavaScript przez ArturoS159 Początkujący (440 p.)

85,873 zapytań

134,644 odpowiedzi

298,914 komentarzy

56,740 pasjonatów

Advent of Code 2021

Top 15 użytkowników

  1. 926p. - rucin93
  2. 925p. - Whistleroosh
  3. 912p. - nidomika
  4. 876p. - adrian17
  5. 867p. - Michal Drewniak
  6. 866p. - Mikbac
  7. 863p. - Mateusz Bogdan
  8. 859p. - CC PL
  9. 797p. - Argeento
  10. 704p. - ScriptyChris
  11. 683p. - tokox
  12. 660p. - Vinox
  13. 645p. - TheLukaszNs
  14. 642p. - s. Dorota Kowalewska
  15. 628p. - WhiskeyTaster
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...