Funktsiyalarga bezatuvchi `defer()` qo'shing
Barcha funktsiyalar prototipiga chaqiruvni ms
millisoniyalar bilan kechiktiradigan, o’ramni qaytaradigan defer(ms)
usulini qo’shing.
Qanday ishlashi kerakligi haqida bir misol:
function f(a, b) {
alert(a + b);
}
f.defer(1000)(1, 2); // 1 soniyadan keyin 3 ni ko'rsatadi
Iltimos, argumentlar asl funktsiyaga o’tkazilishi kerakligini unutmang.
Function.prototype.defer = function (ms) {
let f = this;
return function (...args) {
setTimeout(() => f.apply(this, args), ms);
};
};
// uni tekshirish
function f(a, b) {
alert(a + b);
}
f.defer(1000)(1, 2); // 1 soniyadan keyin 3 ni ko'rsatadi
E’tibor bering: bizning dekoratsiya objekt metodlari uchun ishlashi uchun f.apply
da this
dan foydalanamiz.
Shunday qilib, agar wrapper funktsiya objekt metodi sifatida chaqirilsa, u holda this
asl f
metodiga uzatiladi.
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(); // 1 soniyadan keyin "John" ni ko'rsatadi