Konvertuoti masyvą į funkcijų argumentų sąrašą

Ar galima konvertuoti „JavaScript“ masyvą į funkcijų argumentų seką? Pavyzdys:

 run({ "render": [ 10, 20, 200, 200 ] }); function run(calls) { var app = .... // app is retrieved from storage for (func in calls) { // What should happen in the next line? var args = ....(calls[func]); app[func](args); // This is equivalent to app.render(10, 20, 200, 200); } } 
215
22 авг. nustatyti „ dpq“ rugpjūčio 22 d 2009-08-22 19:29 '09, 7:29, 2009-08-22 19:29
@ 5 atsakymai

Taip Dabartinėse JS versijose galite naudoti:

 app[func]( ...args ); 

ES5 ir vėlesni naudotojai turės naudoti .apply() metodą:

 app[func].apply( this, args ); 

Perskaitykite abu MDN metodus: .apply () , platinkite „...“ operatorių

EDIT - pradinis atsakymas nurodė this||window kaip pirmąjį argumentą .apply() versijoje. Naršyklėse this leidžia window jei bet kuriuo atveju skambinate į išorinį metodą, o window taip pat priklauso nuo naršyklės, todėl atsikratykime.

251
22 авг. Shuckster atsakymas rugpjūčio 22 d 2009-08-22 19:33 '09 19:33 2009-08-22 19:33

Labai skaitomas pavyzdys iš kito panašios temos įrašo:

 var args = [ 'p0', 'p1', 'p2' ]; function call_me (param0, param1, param2 ) { // ... } // Calling the function using the array with apply() call_me.apply(this, args); 

Ir čia yra nuoroda į pradinį pranešimą, kurį aš asmeniškai norėjau skaityti.

110
25 февр. Wilt atsakymas 25 vasaris 2014-02-25 14:18 '14, 14:18, 2014-02-25 14:18
 app[func].apply(this, args); 
24
22 авг. Eric Anderson atsakymas rugpjūčio 22 d 2009-08-22 19:34 '09 19:34 2009-08-22 19:34

Galbūt norėsite pažiūrėti panašų klausimą, kuris buvo paskelbtas kamino perpildymo metu. Norėdami tai padaryti, naudokite .apply() metodą.

12
22 авг. Atsakymą pateikė JJ Geewax 22 rug . 2009-08-22 19:34 '09 19:34 2009-08-22 19:34

@bryc - taip, galite tai padaryti taip:

 Element.prototype.setAttribute.apply(document.body,["foo","bar"]) 

Tačiau atrodo, kad daug darbo ir neaiškumų, palyginti su:

 document.body.setAttribute("foo","bar") 
1
29 окт. atsakymą pateikė vartotojo1527225 spalio 29 d 2015-10-29 06:13 '15, 6:13 2015-10-29 06:13

Kiti klausimai apie „ žymes arba Užduoti klausimą