• 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

VPS Starter Arubacloud
0 głosów
566 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 382 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ź 113 wizyt
pytanie zadane 24 maja 2017 w JavaScript przez ArturoS159 Początkujący (440 p.)

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...