darsga qaytish

Dekorativ ayg'oqchi

Barcha chaqiruvlarni calls xususiyatida ishlashga saqlaydigan o’ramni qaytaradigan dekorativ spy(func) yarating.

Har bir chaqiruv argumentlar massivi sifatida saqlanadi.

Masalan:

function work(a, b) {
  alert( a + b ); // ixtiyoriy funktsiya yoki usuldak ishlaydi
}

work = spy(work);

work(1, 2); // 3
work(4, 5); // 9

for (let args of work.calls) {
  alert( 'call:' + args.join() ); // "call:1,2", "call:4,5"
}

P.S. Ushbu dekorativ ba’zan birlik sinovi uchun foydalidir. Kengaytirilgan shakli – Sinon.JS kutubxonasida sinon.spy.

Sinovlar bilan sandbox-ni oching.

Bu yerda biz barcha argumentlarni logda saqlash uchun calls.push(args) va chaqiruvni yo’naltirish uchun f.apply(this, args) dan foydalanishimiz mumkin.

function spy(func) {
  function wrapper(...args) {
    // using ...args instead of arguments to store "real" array in wrapper.calls
    wrapper.calls.push(args);
    return func.apply(this, args);
  }

  wrapper.calls = [];

  return wrapper;
}

Yechimni sandbox-dagi sinovlar bilan oching.