zpět k lekci

Špiónský dekorátor

důležitost: 5

Vytvořte dekorátor špión(funkce), který by měl vrátit obal, který si bude ukládat všechna volání funkce do své vlastnosti volání.

Každé volání bude uloženo jako pole argumentů.

Například:

function práce(a, b) {
  alert( a + b ); // práce je jakákoli funkce nebo metoda
}

práce = špión(práce);

práce(1, 2); // 3
práce(4, 5); // 9

for (let argumenty of práce.volání) {
  alert( 'volání:' + argumenty.join() ); // "volání:1,2", "volání:4,5"
}

P.S. Takový dekorátor je někdy užitečný pro jednotkové testování. Jeho pokročilá forma je sinon.spy v knihovně Sinon.JS.

Otevřít pískoviště s testy.

Obal, který vrátí špión(f), by si měl uložit všechny argumenty a pak pomocí f.apply přesměrovat volání.

function špión(funkce) {

  function obal(...argumenty) {
    // použijeme ...argumenty místo arguments, abychom do obal.volání uložili „skutečné“ pole
    obal.volání.push(argumenty);
    return funkce.apply(this, argumenty);
  }

  obal.volání = [];

  return obal;
}


Otevřít řešení s testy na pískovišti.