如何将函数包装在函数中以避免代码重复
How to wrap a function in a function to avoid code repetition
在本例中使用jQuery,但这与答案无关。
我有两个事件在页面加载时触发:
triggerEvent(SNVisitsForm);
$('#email').blur(triggerEvent(SNEnterEmail));
第一个只是在用户访问页面时触发,另一个是监听器,当用户模糊电子邮件字段时会触发。
triggerEvent
是一个函数,我用它来用一个简单的条件"包装"许多不同的函数。目标是让这个条件能够包装任何任意函数:
function triggerEvent(wrapped_function) {
if (typeof _cookie !== 'undefined') {
wrapped_function();
console.log('Doing the event, because the cookie is defined');
}
}
对于两个示例中的第一个,该函数工作得很好(即(triggerEvent(SNVisitsForm);
函数完美)。
然而,由于SNEnterEmail
是这样开始的:
function SNEnterEmail(event) {
var email = event.target.value;
我需要通过包装器函数将事件传递给包装的函数。正如您所看到的,有时一个事件并不存在(如两个示例中的第一个)。
有没有更"javascript"的方法可以做到这一点?当然,答案不是"把条件代码放在每一个需要它的调用周围"或"把它放在每个需要它的函数中"。javascript批准的避免重复的方法是什么?
编辑:我应该补充一点,答案很可能与将函数包装在函数中完全不同。这是我能想到的最好的方式来说明我正在努力做什么
接受的答案如何为我解决这个问题:
我确实使用了adrian的包装器函数,然后对我的调用进行了快速修改,使一切正常:
if (window.location.pathname == '/') {
(triggerEvent(SNVisitsForm)());
}
$('#email').blur(triggerEvent(SNEnterEmail));
我不知道为什么adrian将封装的函数改为vars,我把它们作为函数。然后,我简单地对包装器函数(即那些未绑定到侦听器的函数)进行"标准"调用"立即调用函数表达式"。
只需创建一个返回函数的函数装饰器。关闭将照顾剩下的。
function triggerEventWrapper(wrapped_function) {
return function(){
if (typeof _cookie !== 'undefined') {
console.log('Doing the event, because the cookie is defined');
return wrapped_function.apply(this,arguments);
}
}
}
var SNEnterEmail = triggerEventWrapper(function(){
...... the function decloration
});
$('#email').blur(SNEnterEmail);
var SNVisitsFormWrapped = triggerEventWrapper(SNVisitsForm);
SNVisitsFormWrapped();
相关文章:
- 如何将函数包装在函数中以避免代码重复
- 从var向代码隐藏函数传递值
- 为函数代码编写测试
- 如何简化jquery动画函数代码
- 用于删除数组中的零的Javascript函数代码
- 使用JavaScript中的高阶函数概念,用Python编写纯函数代码
- JQuery each() 函数代码即使在集合中没有元素时也在运行
- javascript.获取javascript函数位置或获取函数代码
- 部分函数代码是't已执行
- 什么'这是jQuery下面函数代码中的错误
- 为什么新函数(代码)比直接执行相同的代码更快
- 如何使用javascript调用ascx函数代码?DotNetNuke
- JQuery函数代码运行不正常
- Node.JS:MongoDB更新回调返回结果,返回函数代码
- 用nodejs在一定时间后运行函数/代码
- Jquery只处理第一个函数/代码块
- 如何确保我的dom操作函数/代码在dom被渲染后被调用
- 在jQuery中获取现成函数代码下面的元素
- Jquery函数返回的函数代码不是值
- 什么是'$(这个)'包含在下面的javascript函数代码中