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

Jak w pliku js wywołać funkcję z drugiego pliku?

Object Storage Arubacloud
0 głosów
3,299 wizyt
pytanie zadane 11 grudnia 2017 w JavaScript przez matilogias Obywatel (1,550 p.)

Jak w pliku js wywołać funkcję z drugiego pliku np.

Plik pierwszy

function a()
{
      alert("alert");
}

Plik drugi

function b()
{
      plik1.a()
}

 

komentarz 11 grudnia 2017 przez niezalogowany
Przeglądarka czy node?
komentarz 11 grudnia 2017 przez matilogias Obywatel (1,550 p.)
Przeglądarka

2 odpowiedzi

+2 głosów
odpowiedź 11 grudnia 2017 przez niezalogowany

1. Global scope

Zdefiniuj funkcję w pliku A - w pliku B możesz ją wywołać. Ważne tylko, aby plik A był w kodzie HTML przez plikiem B (W ten sposób korzysta się z bibliotek ściąganych na przykład z CDN-ów)

+ Zerowy próg wejścia
- Można zaśmiecić global scope'a
- Kod ciężki w utrzymaniu / rozwijaniu


2. Moduły ES6 - przeglądarka

Dodaj do tagu script atrybut type="module". Moduły zaczynają działać.

+ Niski próg wejścia
+ Całkiem przyjemnie można zarządzać strukturą projektu
- Niewielkie wsparcie


3. Moduły ES6 - node + module bunlder

Lokalnie używasz bundlera aby połączyć moduły w jeden plik

+ W nodzie można zbudować potężne środowisko developerskie (hot-reloading, minifikacja zasobów, transpilacja ES6+ / JSX / vue / TS /... , testy, linting, itd...)
+ W prosty sposób można zoptymalizować plik wyjściowy
+ Dowolne* wsparcie przeglądarek, przy możliwości pisania nowoczesnego kodu.
- Nieograniczone możliwości - potrzeba sporej wiedzy, żeby to wszystko "ogarnąć"

Zachęcam do zapoznania się na przykład z webpackiem lub rollupem (gdzie podstawowy bundling wykonasz jedną komendą)

Są jeszcze natywne moduły node'a (commonJS), ale wypadają blado przy ES6


4. AMD

Asynchronous Module Definition - w sumie to już martwe, ale rozwiązują problem. (requireJS - chyba najpopularniejszy module loader) Zdecydowanie odradzam.


Jeśli zaczynasz naukę JS, polecam sposób pierwszy. Na chwilę rozwiązuje problem i sam przekonasz się, jakie są jego wady.

Obecnie świat webdevu stoi na sposobie numer 3 i - jeśli się tym interesujesz - tam bym dążył na Twoim miejscu : )

0 głosów
odpowiedź 11 grudnia 2017 przez Tomek Sochacki Ekspert (227,510 p.)
//plik1:
export default function a() {
    //ciało funkcji a
};

//plik2:
import a from './plik1' //oczywiście ścieżka taka w jakiej masz plik

function b() {
    a();
}

No i oczywiście transpilacja babel, np. z użyciem webpack lub innego narzędzia.

komentarz 11 grudnia 2017 przez matilogias Obywatel (1,550 p.)
W obydwu plikach pojawia mi się Unexpected token export/import
komentarz 11 grudnia 2017 przez niezalogowany

Możesz to zrobić bez module bundlera, dodając do tagu script atrybut type="module". Pytanie tylko, czy wsparcie dla tego rozwiązania Cię zadowala.

komentarz 11 grudnia 2017 przez matilogias Obywatel (1,550 p.)
A jest jakiś inny sposób? Najlepiej taki żeby działało na wszystkich popularnych przeglądarkach.
komentarz 11 grudnia 2017 przez Tomek Sochacki Ekspert (227,510 p.)
No to jeśli ma działać na wielu przeglądarkach to wg mnie najlepiej zrobić bundla np. z użyciem webpack + babel i zrobić transpilacje do ES5 i po problemie.
komentarz 11 grudnia 2017 przez matilogias Obywatel (1,550 p.)
Chyba jednak sobie odpuszczę. Za dużo roboty szczególnie że chciałem tylko wyrzucić z jednego pliku kilka set linijek kodu.
komentarz 11 grudnia 2017 przez Tomek Sochacki Ekspert (227,510 p.)

z jednego pliku kilka set linijek kodu

To ja jednak dalej obstawiam przy swoim i proponuję zaprzyjaźnić się np. z webpack i babel :)

Tak duże pliki to z czasem tylko same problemy. Pomyśl, jak za pół roku będziesz chciał coś zmienić i musisz analizować te kilkaset jak nie kilka tysięcy linii. Lepiej pracować na małych plikach i po prostu łączyć je w bundla (jeśli mówimy o przeglądarkach).

komentarz 11 grudnia 2017 przez Chess Szeryf (76,710 p.)

matilogias, odpowiedź już chyba padła. Dla uściślenia, możesz napisać tak:

Plik1.js:

function a(){
   return 5;
}

Plik2.html:

<script src="plik1.js"></script>

<script>
console.log(a()); // return 5
</script>

 

Podobne pytania

0 głosów
2 odpowiedzi 1,513 wizyt
pytanie zadane 2 listopada 2016 w PHP przez arvir Nowicjusz (200 p.)
+2 głosów
2 odpowiedzi 382 wizyt
pytanie zadane 6 września 2020 w PHP przez Igorek Mądrala (6,290 p.)
0 głosów
2 odpowiedzi 729 wizyt
pytanie zadane 30 listopada 2016 w JavaScript przez Raptowny Początkujący (420 p.)

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

61,954 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!

...