当前位置:首页 > JavaScript

js实现before

2026-04-06 07:14:40JavaScript

实现 before 方法

在 JavaScript 中,可以通过扩展原型链实现类似 before 的功能,即在目标函数执行前插入自定义逻辑。以下是具体实现方式:

Function.prototype.before = function(beforeFn) {
    const originalFn = this;
    return function() {
        beforeFn.apply(this, arguments);
        return originalFn.apply(this, arguments);
    };
};

使用示例

function log() {
    console.log('原始函数执行');
}

const wrappedLog = log.before(() => {
    console.log('前置逻辑执行');
});

wrappedLog();
// 输出:
// 前置逻辑执行
// 原始函数执行

实现原理

  1. 扩展 Function.prototype
    通过修改 Function 的原型链,所有函数实例均可调用 before 方法。

  2. 闭包保存原函数
    使用闭包保存原始函数引用 (originalFn),确保在包装函数中能正确调用原逻辑。

    js实现before

  3. 参数传递
    apply 方法确保 arguments 能正确传递给前置函数和原函数,保持上下文 (this) 一致。

注意事项

  • 链式调用
    多次调用 before 会按调用顺序反向执行前置逻辑(后添加的先执行)。

    js实现before

  • 异步场景
    若前置逻辑包含异步操作,需改用 Promiseasync/await 实现。

  • 性能影响
    频繁扩展原型链可能引发维护问题,建议在明确需求场景下使用。

替代方案(ES6+)

使用高阶函数避免污染原型链:

const before = (beforeFn, originalFn) => (...args) => {
    beforeFn(...args);
    return originalFn(...args);
};

const enhancedFn = before(
    () => console.log('前置逻辑'),
    () => console.log('原始逻辑')
);

标签: jsbefore
分享给朋友:

相关文章

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…

js实现原理

js实现原理

JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…