Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wywołanie funkcji
SaMi
post
Post #1





Grupa: Zarejestrowani
Postów: 173
Pomógł: 14
Dołączył: 27.03.2004
Skąd: Białystok

Ostrzeżenie: (0%)
-----


Witam, mam mały problem i najprawdopodobniej jest to banał. Mianowicie gdy tworzę zewnetrzny plik js poprzez utworzenie tagu <script> w DOMie i wywoluję zawartą w nim funkcje uzyskuję komunikat ReferenceError: user is not defined. natomiast jeśli załaduję klasycznie w htmlu ten sam plik wszystko działa bez problemu.
  1. <script type="text/javascript">
  2. (function(d,s){
  3. var js,jsr = d.getElementsByTagName(s)[0];
  4. js = d.createElement(s);
  5. js.src = '//www.mojadomena.pl/js/iframe.js';
  6. jsr.parentNode.insertBefore(js,jsr);
  7. }(document,'script'));
  8.  
  9. user.setAccount(['12345']);

iframe.js w wielkim uproszczeniu
  1. // (function(w){ - tego tu miało tu nie być
  2. var user = user || (function(){
  3. _args = {};
  4.  
  5. return {
  6. setAccount: function(a){
  7. _args = a;
  8. },
  9. key: function(){
  10. return _args[0];
  11. }
  12. };
  13. }());


Ten post edytował SaMi 30.12.2013, 10:30:00
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
lukasz1985
post
Post #2





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


[JAVASCRIPT] pobierz, plaintext
  1. function(d,s){
  2.  
  3. var js,jsr = d.getElementsByTagName(s)[0];
  4.  
  5. js = d.createElement(s);
  6.  
  7. js.src = '//www.mojadomena.pl/js/iframe.js';
  8.  
  9. jsr.parentNode.insertBefore(js,jsr);
  10.  
  11. }(document,'script')); // Zupełnie nie potrzebne
  12.  
[JAVASCRIPT] pobierz, plaintext



[JAVASCRIPT] pobierz, plaintext
  1. function(){
  2.  
  3. var js,jsr = document.getElementsByTagName(s)[0];
  4.  
  5. js = document.createElement("script");
  6.  
  7. js.src = '//www.mojadomena.pl/js/iframe.js';
  8.  
  9. jsr.parentNode.insertBefore(js,jsr);
  10.  
  11. }();
  12.  
[JAVASCRIPT] pobierz, plaintext



Poza tym proponowałbym - zamiast używania anonimowych funkcji do korzystania z "przestrzeni nazw":

[JAVASCRIPT] pobierz, plaintext
  1. var mojmodul = {};
  2. mojmodul.zrobCos = function(){
  3.  
  4. var js,jsr = document.getElementsByTagName(s)[0];
  5.  
  6. js = document.createElement("script");
  7.  
  8. js.src = '//www.mojadomena.pl/js/iframe.js';
  9.  
  10. jsr.parentNode.insertBefore(js,jsr);
  11.  
  12. };
  13.  
  14. mojmodul.zrobCos();
  15.  
[JAVASCRIPT] pobierz, plaintext



Anonimowe funkcje są fajne - dla małych fragmentów kodu - przynajmniej takie moje zdanie po tym jak potrafią one namieszać w kodzie, który w ostateczności staje się jednym wielkim śmietnikiem. Moduły w dużym stopniu elminują konieczność ich używania jeśli chodzi o moduły. W kodzie czysto obiektowym potrzebne jest już zupełnie inne podejście do tematu.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 03:04