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.

function class() {
  this.one=one;
  function one(arg1,arg2) {
     console.log(arg1 + ' ' + arg2);
  }
}


function two(func,arg1) {
 var arg2='str';
 // itt arguments tömbben megvan arg1, vagy többi paraméter.
 // itt kéne paraméterekkel meghívni a paraméterként kapott függvény példányt.

 // amúgy azt olvastam hogy az arguments tömb már deceprated, mit lehet helyette  
 // használni?
}


var c1=new class();
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
function Klass() {
  this.one = function (arg1,arg2) {
    console.log(arg1 + ' ' + arg2);
  }
}
  
function two (func, arg1) {  
  var args = Array.prototype.slice.call(arguments); // Tömböt készítünk
  args.shift(); // Kivesszük a függvényt a paraméterek közül
  args.push('str'); // Hozzárakjuk a paraméterekhez az 'str'-t
  func.apply(this, args);
}

var c1 = new Klass();
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.