الرجوع الي الدرس

إضافة الدالة المعدلة للدوال

أضف إلى النموذج الخاص بالدوال الدالة defer(ms)، والتى تقوم بإرجاع حاوى (wrapper) وتؤخر التنفيذ بعد ms مللى ثانية.

هاك مثال لكيفية استخدامها:

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

f.defer(1000)(1, 2); // تعرض 3 بعد ثانية واحدة

لاحظ أن المتغيرات يجب أن تُمرر إلى الدالة الأصلية.

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

// اختبر
function f(a, b) {
  alert( a + b );
}

f.defer(1000)(1, 2); // تعرض 3 بعد ثانية واحدة

لاحظ: استخدمنا this فى f.apply لتعمل مع دوال الكائنات.

ولذلك إذا تم استدعاء دالة كدالة كائن (method) فإن this سيتم تمرريرها إلى الدالة الأصلية 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();