kembali ke pelajaran

Menambah dekorasi "defer()" ke fungsi.

Tambahkan prototype dari semua fungsi metodedefer(ms), yang mengembalikan pembungkus, menunda pemanggilan dengan ms milidetik.

Contoh:

function f(a, b) {
  alert( a + b );
}

f.defer(1000)(1, 2); // tampilkan 3 setelah 1 detik

Perhatikan bahwa argumennya harus diberikan ke fungsi aslinya.

Function.prototype.defer = function(ms) {
  let f = this;
  return function(...args) {
    setTimeout(() => f.apply(this, args), ms);
  }
};

// check it
function f(a, b) {
  alert( a + b );
}

f.defer(1000)(1, 2); // menampilkan 3 setelah 1 detik

Ingatlah: kita menggunakan this didalam f.apply untuk membuat dekorasi kita bekerja untuk metode objek.

Jadi jika pembungkus fungsinya dipanggil sebagai metode objek, maka this diberikan kepada metode asli f.

Function.prototype.defer = function(ms) {
  let f = this;
  return function(...args) {
    setTimeout(() => f.apply(this, args), ms);
  }
};

let user = {
  name: "John",
  sayHi() {
    alert(this.name);
  }
}

user.sayHi = user.sayHi.defer(1000);

user.sayHi();