GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

No menu could be recovered. Follow the blue links in the page.

This view

  • Original page
  • New address

GeezerVison is showing uz.javascript.info — Dekorativni kechiktirish

  • Qo'llanma
  • JavaScript dasturlash tili
  • Funktsiyalar bilan ilg'or ishlash
  • Dekorativlar va ekspeditorlik, call/apply
darsga qaytish

Dekorativni kechiktirish

f ning har bir chaqiruvini ms millisoniyalarga kechiktiradigan dekorativ delay(f, ms) yarating.

Masalan:

function f(x) {
  alert(x);
}

// o'rama yarating
let f1000 = delay(f, 1000);
let f1500 = delay(f, 1500);

f1000("test"); // 1000ms dan keyin "test" ni ko'rsatadi
f1500("test"); // 1500ms dan keyin "test" ni ko'rsatadi

Boshqacha qilib aytganda, delay(f, ms) f ning ms bilan kechiktirilganligini qaytaradi.

Yuqoridagi kodda f bitta argumentning funktsiyasidir, ammo sizning yechimingiz barcha argumentlarni va kontekstni this dan o’tkazishi kerak.

Sinovlar bilan sandbox-ni oching.

Yechim:

function delay(f, ms) {
  return function () {
    setTimeout(() => f.apply(this, arguments), ms);
  };
}

let f1000 = delay(alert, 1000);

f1000("test"); // 1000ms dan keyin "test" ni ko'rsatadi

Iltimos, bu yerda o’q funktsiyasidan qanday foydalanilganiga e’tibor bering. Ma’lumki, o’q funktsiyalari o’zlarining this va argumentlari ga ega emas, shuning uchun f.apply(this, arguments) this va argumentlarni o’ramdan oladi.

Agar biz odatdagi funktsiyani o’tkazsak, setTimeout uni argumentlarsiz chaqiradi va this=window (biz brauzerda ekanligimizni taxmin qilamiz).

Biz hali ham this dan oraliq o’zgaruvchanni ishlatib o’tishimiz mumkin, ammo bu biroz noqulayroq:

function delay(f, ms) {
  return function (...args) {
    let savedThis = this; // buni oraliq o'zgaruvchanga saqlang
    setTimeout(function () {
      f.apply(savedThis, args); // bu yerda ishlating
    }, ms);
  };
}

Yechimni sandbox-dagi sinovlar bilan oching.

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.