22. oktober 2003 - 13:19Der er
39 kommentarer og 1 løsning
kalde funktion samt parametre fra array
<script language="javascript"> function add(){ var result=0; for(var c =0;c<arguments.length;c++){ result += arguments[c] } alert(result); } add('1',4,'6\''); </script>
var marr= new Array(); marr[0]=add ; //her skal funktionen være marr[1]=2; marr[2]=''; marr[3]=6;
hvordan kalder jeg funktionen der ligger i marr[0], med de parametre der ligger i marr[1+] ? Og helst uden at skulle op i javascript, bemærk at parametrene godt kan indeholde ' og æ ø å
function add(){ var result=0; for(var c =0;c<add.arguments.length;c++){ if(add.arguments[c].length>1)add(add.arguments[c]); else result += add.arguments[c]; alert(result); }
Men funktionen virker da stadig til det som den ellers bruges til -- og når du alligevel først i linjen skriver marr kan du vel også skrive det senere i linjen !-)
en lykke struktur er helt fint, din makeAdd funktion kan bare ikke bruges i det her tilfælde, da den kun virker til en bestemt funktion og ikke kan anvendes på alle typer funktioner
Nu er det et ekstremt dårligt eksempel, for "popup's" er en ugyldig html-identifier, så den er ulovlige som window-name parameter i window.open ...
-- men det kan selvfølgelig forekomme, så må man finde på noget, så det ikke sker !-)
-- og jeg tror ikke den kan _ikke_ hentes hjem 'for good' uden uforholdsmæssigt meget arbejde, så du må lave nogle regler for om du vil tillade ' eller "" -- i den ovenstående er det "" som er tilladt ...
Jeg har grundet lidt dårlig tid kun skimmet tråden kort. Det resulterer i to kommentarer: 1. I JavaScript kan/må man ikke bruge special-tegn - herunder æ, ø og å - så det bør dit array ikke indeholde.
2. JS-funktioner har en property 'arguments', som er et array, indeholdende de argumenter, funktionen er blevet kaldt med (ses meget brugt i MacroMedia's [f.eks. DreamWeaver] funktioner). Et eksempel kunne være:
function OleBoleSnask() { var a = arguments; for (i=0; i<a.length; i++) { alert(a[i]) } }
Jo så langt er jeg nået, balladen går på om man på en eller anden måde kan tilføje parametre til en funktion uden om den almindelige parameter angivning f.eks
roenving har foreslået opbygning af en streng ud fra de parametre der er angivet for til sidst at fyre en eval af ...
Men er der andre måder at gøre det på ? Jeg har siden spg blev stillet set at der findes en call metode der måske kan anvendes, men så vist jeg kunne se duer den kun i ie 5.5 og netscape 4+ (problemet er slf ie og ikke netscape)
Jamen, den er da så generel, den kan blive ..... uden clairvoyance ;o) Jeg forstår ikke, hvordan det multidimensionale array skulle ændre på noget(?) :) /mvh
Du bliver jo nødt til at definere, hvad funktionen skal gøre med de argumenter, den får med. En indbygget funktion - som alert() - får du ikke til at virke sådan uden en wrapper - eller clairvoyance :) /mvh
(damn tab+enter) for(var i=0:i<3;i++){ var temp=arguments.length; switch(temp){ case 1: break; case 2: arguments[0](arguments[1]); break; case 3: arguments[0](arguments[1],arguments[2]); break; } }
Jamen, jeg fatter stadig ikke, hvad du vil med det - og så kan det jo blive svært at give et begavet bud på, hvad du skal gøre. Mit sidste forsøg på et gæt: Kan du bruge dette til noget:
var a = new Array( new Array() ); a[0][0] = bla; a[0][1] = "noget"; a[0][2] = "noget andet";
function first tager 1 parameter og ligger i marr[0][0] function second tager 2 parameter og ligger i marr[1][0] function third tager 3 parameter og ligger i marr[2][0]
opgaven går på : lav mig et loop der kan køre disse funktioner Det er jo ligegyldigt hvad funktionerne laver, det er princippet bag at smide parametre på dynamisk nederst i min kommentar har jeg lavet et eksempel på et loop, men det loop tilføjer jo ikke parametrene dynamisk og jeg vil få et problem hvis der pludseligt er 5 parametre i listen . Hvis jeg udvider loopet til at håndtere 10 parametre løber jeg ind i samme problematik ved 11 parametre osv osv
Jamen, hvis ikke du vil indrette funktionen til det, bliver det umuligt, uden biologiske og selvtænkende JS-funktioner. Så har det vist ikke længere noget med scripting at gøre - men nærmere noget ESP-mumbo-jumbo :)
det kunne jo være der var en eller anden appendparameter funktion eller create pseudo parameterliste ud fra et array og så array[n](hjemmestrikketpseudoliste)
ja, men jeg har åbenbart misforstået hvad det var der stod, du smider et array med som parameter ... Det kan slf være en løsning, ikke helt det jeg var ude efter til at starte med , men med lidt omskrivning kan det nok lade sig gøre alligevel :-)
Smid et svar, så jeg få lukket den her rodebutik :-)
Jeg synes nu ikke at roenving' besvarelser er de samme som Oleboles , Roenvings løsninger var enten at lave om i min eksempel funktion eller at opbygge en streng ud fra et array for til sidst at køre en eval. Så jeg holder stadig på at mine points er gået til det rigtige svar. Hvad Olebole så vælger at gøre med sine point er jo hans egen sag
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.