Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[JS] Functie aanroepen via een variabele, hoe doe je dit?

Pagina: 1
Acties:

  • R0K13
  • Registratie: Januari 2003
  • Laatst online: 11-11 13:15
Hoi,

Stel ik heb de volgende code:

JavaScript:
1
2
3
4
5
6
7
var func = 'test';

function test(value) {

 alert(value);

}


Nu bevat de variabele 'func' de naam van de functie die ik wil aanroepen. Hoe kan ik die nu aanroepen? In PHP kan dit door gewoon $func() te doen dus gewoon achter variabele haakjes te plaatsen. Maar hoe werkt dit in javascript?

  • Padschild
  • Registratie: September 2004
  • Laatst online: 28-11-2020
Door gebruik te maken van:

JavaScript:
1
eval(func + "();");


KnoppenSneller: Nu lijkt het net alsof ik weer van je heb afgekeken, maar ik zag me fout toen ik op het post knopje drukte :+

[ Voor 81% gewijzigd door Padschild op 11-09-2007 15:48 ]


  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 20:51

Koppensneller

winterrrrrr

Padschild schreef op dinsdag 11 september 2007 @ 15:46:
Door gebruik te maken van:

JavaScript:
1
eval(func);
In dit geval dus:

JavaScript:
1
eval(func + "();");


natuurlijk ;)

  • R0K13
  • Registratie: Januari 2003
  • Laatst online: 11-11 13:15
Bedankt voor de snelle reactie.. :)

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 10-11 15:46

OkkE

CSS influencer :+

Ik vraag me altijd af waarom mensen zoiets zouden willen gebruiken? Ik vind "variabele functienamen" namelijk redelijk smerig.

[ Voor 7% gewijzigd door OkkE op 11-09-2007 16:07 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 17:18

glashio

C64 > AMIGA > PC

Eval is bad!

JavaScript:
1
2
3
4
5
6
7
var func = 'test';

window[func]('Alert me');

function test(value) {
 alert(value);
}

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:51

crisp

Devver

Pixelated

eval is hier ook niet nodig:
JavaScript:
1
window[func]();

;)

net te laat :P

[ Voor 16% gewijzigd door crisp op 11-09-2007 16:10 ]

Intentionally left blank


  • R0K13
  • Registratie: Januari 2003
  • Laatst online: 11-11 13:15
OkkE schreef op dinsdag 11 september 2007 @ 16:07:
Ik vraag me altijd af waarom mensen zoiets zouden willen gebruiken? Ik vind "variabele functienamen" namelijk redelijk smerig.
Ik heb dit nodig omdat ik een soort AJAX toolkit aan het maken ben waarbij php functies kunnen worden geexporteerd. Ik weet dus niet van te voren de namen van je functies in php. Maar je hebt wel gelijk als het anders kan kun je dit beter niet gebruiken. :)

Verwijderd

OkkE schreef op dinsdag 11 september 2007 @ 16:07:
Ik vraag me altijd af waarom mensen zoiets zouden willen gebruiken? Ik vind "variabele functienamen" namelijk redelijk smerig.
Ligt eraan. Als je een soort plugin systeem hebt hoeft het niet zo verkeerd te zijn.

  • benoni
  • Registratie: November 2003
  • Niet online
Verwijderd schreef op dinsdag 11 september 2007 @ 18:21:
Ligt eraan. Als je een soort plugin systeem hebt hoeft het niet zo verkeerd te zijn.
Daarop voortboordurend, is het inderdaad wel overzichtelijk om met een library-object te werken, en daar kun je de al of niet naamloze functies ook netjes inhangen, zoiets:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Main library
function Environment() {
  this.tasks = new Array();
}
var its = new Environment();

// Named function
its.show = function show() {
  for (n in its.tasks) {
    its.tasks[n](n);
  }
}

// Anynomous function 1
its.tasks[1] = function(n) {
  document.write("Task " + n + "\n");
}

// Anynomous function 2
its.tasks[2] = function(n) {
  document.write("Task " + n + "\n");
}

its.show();

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 10-11 15:46

OkkE

CSS influencer :+

Er zijn ook best situaties te bedenken waarin het handig kan zijn, ik wilde met mijn reply alleen even aangeven dat je wel goed moet nadenken over het gebruik er van. Soms is het heel simpel op te lossen met een andere manier van bouwen. :)

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.

Pagina: 1