当前位置:首页 > 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),确保在包装函数中能正确调用原逻辑。

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

注意事项

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

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

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

替代方案(ES6+)

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

js实现before

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

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

标签: jsbefore
分享给朋友:

相关文章

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现下拉菜单

js实现下拉菜单

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

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let curr…

js实现定位

js实现定位

使用Geolocation API获取当前位置 在JavaScript中,可以通过浏览器内置的Geolocation API获取用户的地理位置信息。该API需要用户授权才能访问位置数据。 if (n…

js实现原理

js实现原理

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