js 实现before
实现 before 方法
在 JavaScript 中,可以通过扩展 Function.prototype 来实现一个 before 方法,该方法允许在目标函数执行前插入一个前置函数。以下是实现方式:
Function.prototype.before = function(beforeFn) {
const originalFn = this;
return function(...args) {
beforeFn.apply(this, args);
return originalFn.apply(this, args);
};
};
使用示例:
function logHello() {
console.log('Hello');
}
function logWorld() {
console.log('World');
}
const logHelloBeforeWorld = logWorld.before(logHello);
logHelloBeforeWorld(); // 输出: Hello World
实现 before 高阶函数
如果不希望污染原型链,可以通过高阶函数实现独立的 before 方法:
function before(beforeFn, originalFn) {
return function(...args) {
beforeFn.apply(this, args);
return originalFn.apply(this, args);
};
}
使用示例:
function logName(name) {
console.log(`Name: ${name}`);
}
function validateName(name) {
if (!name) throw new Error('Name is required');
}
const logValidName = before(validateName, logName);
logValidName('Alice'); // 输出: Name: Alice
logValidName(''); // 抛出错误: Name is required
注意事项
before方法会确保前置函数先执行,但不会修改原函数的逻辑。- 如果前置函数抛出异常,原函数不会执行。
- 可以通过
apply或call确保this上下文正确传递。







