new Function()
Mssmar
- programmiertechnik
Hallo,
zunächst muss ich erwähnen ,dass ich mir nicht ganz sicher bin, ob das hier zu diesem Themenbereich gehört.
Es wird oft mal folgendermaßen eine JScript-Funktion erstellt:
as = '{'+
'ergebnis = xyz*ccc';+
'return ergebnis';+
'}';
var test = new Function ("xyz","ccc", as);
Und das ist das gleiche wie das hier:
function test(xyz, ccc){
ergebnis = xyz*ccc;
return ergebnis;
}
Ich frage mich aber wozu bzw. warum sollte man den ersten Weg gehen bzw. verwenden, wenn mann es einfacher und übersichtlicher machen kann.
Es sei denn, es gibt einen technischen Grund für sowas und das würde ich gerne wissen.
Gruß
Messmar
Es kann ja sein, dass eine Funktion aufgrund von Werten dynaisch erstellt werden muss, da verschiedene Bedingungen verschiedene Aktionen bedingen - Allerdings halte ich persönlich das für schlechten Stil - Ich wusste nicht mal, dass es so etwas gibt..
Hi,
Es kann ja sein, dass eine Funktion aufgrund von Werten dynaisch erstellt werden muss, da verschiedene Bedingungen verschiedene Aktionen bedingen - Allerdings halte ich persönlich das für schlechten Stil
das kommt darauf an. Anonyme Funktionen kann man natürlich auch ohne new Function() erstellen und hin und her schieben, aber wenn diese dann noch individuelle Objektreferenzen benötigt, ist es ohne oft nicht zu machen. Darüber hinaus kann man mit Function-Objekten eval() vermeiden (bzw. auf eine andere Abstraktionsebene verlegen, die ganz sicher günstiger ist), per Prototyping Funktionen neue Eigenschaften geben usw.
Ich wusste nicht mal, dass es so etwas gibt..
Schlechtes Zeichen. SCNR ;-)
Cheatah
Hi,
[...] Darüber hinaus kann man mit Function-Objekten eval() vermeiden (bzw. auf eine andere Abstraktionsebene verlegen, die ganz sicher günstiger ist), per Prototyping Funktionen neue Eigenschaften geben
Ein Beispiel wäre hier Ideal.
Danke und Gruß
Messmar
Hi,
[...] Darüber hinaus kann man mit Function-Objekten eval() vermeiden (bzw. auf eine andere Abstraktionsebene verlegen, die ganz sicher günstiger ist), per Prototyping Funktionen neue Eigenschaften geben
Ein Beispiel wäre hier Ideal.
eval('return '+x+'==42') ./. new Function('n', 'return n==42')(x)
Function.prototype.toString = function() { return 'this is a function'; }
Cheatah
Es wird oft mal folgendermaßen eine JScript-Funktion erstellt:
dir ist nicht klar was JScript ist, oder?
Es ist auf jeden Fall nicht Javascript!
Aber das sagte ich heute bereits.
as = '{'+
'ergebnis = xyz*ccc';+
'return ergebnis';+
'}';var test = new Function ("xyz","ccc", as);
wieso du dass jetzt als html auszeichnest ist mir ein Rätsel.
>
> Und das ist das gleiche wie das hier:
> ~~~html
> function test(xyz, ccc){
> ergebnis = xyz*ccc;
> return ergebnis;
> }
>
Ich frage mich aber wozu bzw. warum sollte man den ersten Weg gehen bzw. verwenden, wenn mann es einfacher und übersichtlicher machen kann.
Genau.
Es sei denn, es gibt einen technischen Grund für sowas und das würde ich gerne wissen.
Ja, wenn du zur Laufzeit eine JS Funktion aus einem String erstellen willst ist new Funktion oft der beste Weg.
Struppi.
Hi,
Ja, wenn du zur Laufzeit eine JS Funktion aus einem String erstellen willst ist new Funktion oft der beste Weg.
vorausgesetzt, Du hast vorher Funktion.prototype = new Function() ausgeführt.
Cheatah, SCNR ;-)
Hallo Mssmar.
Ich frage mich aber wozu bzw. warum sollte man den ersten Weg gehen bzw. verwenden, wenn mann es einfacher und übersichtlicher machen kann.
Ein abgewandeltes Beispiel aus meinem selfjs:
var buttons = ['Apache', 'CSS', 'HTML', 'JavaScript', 'PHP', 'XML'];
for (var i = 0; i < buttons.length; ++i) {
var button = document.createElement('input');
button.type = 'button';
button.value = buttons[i];
button.onclick = new Function(
'insertCodeBlock("' + buttons[i].toLowerCase() + '",' +
'document.getElementsByTagName("textarea")[0]);'
);
/* Button ins Dokument einhängen */
}
Der Wert des ersten Parameters wird also dynamisch generiert und steht später nicht mehr zur Verfügung, weshalb eine anonyme Funktion darauf nicht mehr zugreifen könnte.
Einen schönen Freitag noch.
Gruß, Ashura
Hallo Ingrid.
Ein abgewandeltes Beispiel aus meinem selfjs:
Ein ungünstiges Beispiel, da ich soeben einen besseren Weg gefunden habe: ich greife einfach auf this.value des Buttons zu.
Vergesst mein Beispiel.
Einen schönen Freitag noch.
Gruß, Ashura