관련 학습 권장사항: javascript
function debounce(func, ms = 500) { let timer; return function (...args) { if (timer) { clearTimeout(timer); } timer = setTimeout(() => { func.apply(this, args); }, ms); }; }复制代码
function throttle(func, ms) { let canRun = true; return function (...args) { if (!canRun) return; canRun = false; setTimeout(() => { func.apply(this, args); canRun = true; }, ms); }; }复制代码
function myNew(Func) { const instance = {}; if (Func.prototype) { Object.setPrototypeOf(instance, Func.prototype); } const res = Func.apply(instance, [].slice.call(arguments, 1)); if (typeof res === "function" || (typeof res === "object" && res !== null)) { return res; } return instance; }复制代码
Function.prototype.myBind = function (context = globalThis) { const fn = this; const args = Array.from(arguments).slice(1); const newFunc = function () { if (this instanceof newFunc) { // 通过 new 调用,绑定 this 为实例对象 fn.apply(this, args); } else { // 通过普通函数形式调用,绑定 context fn.apply(context, args); } }; // 支持 new 调用方式 newFunc.prototype = fn.prototype; return newFunc; };复制代码
Function.prototype.myCall = function (context = globalThis) { // 关键步骤,在 context 上调用方法,触发 this 绑定为 context context.fn = this; let args = [].slice.call(arguments, 1); let res = context.fn(...args); delete context.fn; return res; };复制代码
Function.prototype.myApply = function (context = globalThis) { // 关键步骤,在 context 上调用方法,触发 this 绑定为 context context.fn = this; let res; if (arguments[1]) { res = context.fn(...arguments[1]); } else { res = context.fn(); } delete context.fn; return res; };复制代码
위 내용은 JavaScript의 일반적인 필기 기능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!