• 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

Object Storage Arubacloud
0 głosów
573 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,600 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,600 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,620 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 397 wizyt
pytanie zadane 17 stycznia 2016 w C i C++ przez secsec Mądrala (7,250 p.)
0 głosów
0 odpowiedzi 160 wizyt
pytanie zadane 17 czerwca 2020 w JavaScript przez Uwaciusz Nowicjusz (140 p.)
0 głosów
1 odpowiedź 116 wizyt
pytanie zadane 24 maja 2017 w JavaScript przez ArturoS159 Początkujący (440 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...