Konwertowanie funkcji do stringa

0

Mam funkcję która wywołuje inną funkcję:

const foo  = (x) => {
  bar(x);
}

Ta funkcja jest dorzucana do htmla po stronie serwera (nie zmienię tego, nad tym nie mam kontroli)


`<script>(${foo})(x)</script>`

Pytanie czy istnieje jakiś hack żeby to działało? Jak wiadomo, przy konwersji na stringa foo "zgubi" referencje do bar. Jedyne co mi przychodzi do głowy to skopiować całe ciało funkcji bar do foo

0

Jak wiadomo, przy konwersji na stringa foo "zgubi" referencje do bar.

Huh - co to znaczy? Jaką referencję?

0

@Patryk27: może nie tyle zgubi co bar zwyczajnie nie będzie po stronie klienta. Przy wywołaniu będzie bar is not defined

0

Możesz w ten sam sposób "zserializować" bar a potem przekazać go do scope'a dla foo:

// funkcje do serializacji
const bar = (x) => {
  console.log('bar ' + x * 2);
}

const foo = (x) => {
  bar(x);
}

// serializacja (u Ciebie po stronie serwera)
const barS = bar.toString();
const fooS = foo.toString();


(() => {
  // deserializacja funkcji
  const bar = new Function('return ' + barS)();
  const foo = new Function('bar', 'return ' + fooS)(bar);

  // wywołanie już normalnie
  foo(5);  
})();

1 użytkowników online, w tym zalogowanych: 0, gości: 1