ugrás a tartalomhoz

Függvényhívás, callback, paraméterezés

therest · 2011. Május. 10. (K), 17.56
Sziasztok!

Adott egy függvény ami első paraméterül egy másik függvényt kap, eztán több paraméter is megadható neki. Azt kéne megoldani, hogy ez az függvény hívja meg a paraméterként kapott függvényt további paraméterekkel. Persze variáltabb a helyzet kicsit, de nem hiszem az "osztályok" számítanának itt. Körbejártam a call, apply témakörét, de ott nem egy adott példányt hívnak ha jól értettem. Szóval valami olyasmire lenne szükségem, hogy egy tömbként adhassam át a paraméterként megadott függvénynek a paramétereket. Kódban már érthetőbb lesz talán. Persze az eval sima, de kerülném.
  1. function class() {  
  2.   this.one=one;  
  3.   function one(arg1,arg2) {  
  4.      console.log(arg1 + ' ' + arg2);  
  5.   }  
  6. }  
  7.   
  8.   
  9. function two(func,arg1) {  
  10.  var arg2='str';  
  11.  // itt arguments tömbben megvan arg1, vagy többi paraméter.  
  12.  // itt kéne paraméterekkel meghívni a paraméterként kapott függvény példányt.  
  13.   
  14.  // amúgy azt olvastam hogy az arguments tömb már deceprated, mit lehet helyette    
  15.  // használni?  
  16. }  
  17.   
  18.   
  19. var c1=new class();  
  20. two(c1.one,arg1);  
Köszi a helpet!
 
1

Függvények

Poetro · 2011. Május. 10. (K), 19.06
Először is kezdjük azzal, hogy ne használjuk a class szót, mert az lefoglalt szó, és lehet később egy böngészőben más lesz a jelentése. Helyette legyen mondjuk Klass. Eleve osztályok nevét nagybetűvel kezdjük, hogy meg tudjuk különböztetni a függvényeket a konstruktortól.

Azt ugye tudod, hogy a fenti one függvényen belül a this-nek más lesz jelentése, mintha c1.one-ként hívod meg, mint a two függvényen belül? amennyiben mindig egy osztály metódusait szeretnéd meghívni a two függvényen belül, akkor érdemes lenne bevezetni egy target változót, amivel befolyásolni lehetne mi legyen a this.

Az arguments az nem tömb, és nem depricated. Az fn.arguments az, ami depricated.
deprecated arguments, arguments.callee, and arguments.length as properties of Function instances
  1. function Klass() {  
  2.   this.one = function (arg1,arg2) {  
  3.     console.log(arg1 + ' ' + arg2);  
  4.   }  
  5. }  
  6.     
  7. function two (func, arg1) {    
  8.   var args = Array.prototype.slice.call(arguments); // Tömböt készítünk  
  9.   args.shift(); // Kivesszük a függvényt a paraméterek közül  
  10.   args.push('str'); // Hozzárakjuk a paraméterekhez az 'str'-t  
  11.   func.apply(this, args);  
  12. }  
  13.   
  14. var c1 = new Klass();  
  15. two(c1.one, 'arg1');  
Talán érdemes lenne elolvasni a JavaScript függvények című cikkement.
2

Köszi az infókat. Class

therest · 2011. Május. 11. (Sze), 01.10
Köszi az infókat. Class névvel én sem hoznék létre osztályt(az itteni példába számdékosan tettem, jelölve ezzel a felhasználás szándékát), személy szerint én a "cOsztálynév" formát kedvelem, bár ez leginkább ízlés dolga egy egyszemélyes projektnél.

Az argumentssel kapcsolatban akkor megnyugodtam, hogy használhatom nyugodtan. Azt sejtettem, hogy nem tömb, mivel mert nincsenek meg neki a szokásos tömb metódusai.

Amúgy apró hülyeség volt a kódban (az apply függvényél nem tömböt adtam át második paraméterként, hanem elkezdtem beírni a paramétereket teszt jelleggel), de sosem vettem volna észre, ha nem tudom összehasonlítani valaki máséval lépésről lépésre.