业务场景:原有业务逻辑已经封装好,现如今需要在现有逻辑上增加逻辑处理。
实现分析:该业务场景类似于java的AOP,我们可以通过javascript中的call与apply方法实现。
代码:
var func1 = function(arg){ console.info('this is func1 ' + arg); } var func2 = function(arg){//先执行func2中的代码,在执行func1中的代码 console.info('this is func2'); arg.call(this,'test'); } var func3 = function(arg){//先执行func3中的代码,再执行func1中的代码 console.info('this is func3'); arg.apply(this,['test']); } //调用新方法 func2(func1); func3(func1);
这里需要注意call与apply方法传参的方式。通过以上代码,我们可以看到在执行方法func1时,我们增加了其他的处理逻辑。
上边例子不带直观,举一个实际的应用。
开发web应用,免不了使用AJAX技术。也会经常用到jquery框架。在jquery框架中已经有封装好的ajax调用方法。
jquery中的ajax方法示例:
$.ajax({ url : url, dataType : 'json', type : 'post', data : {a : 'a', b : 'b'}, success : function(result){ checkSession(result); 1.业务逻辑1 2.业务逻辑2 //执行业务逻辑代码 } });
在回调函数中编写业务逻辑时,避免不了有相同的业务逻辑,最常见的就是对session的判断。为了避免每次使用$.ajax都要编写调用checkSession代码,我们可以将这个方法封装以下
$.extend({ /** * 封装jquery的ajax方法, * 传入参数为以下格式 * arg : {url : url, data : data, func : function} * url : 将会自动添加baseUrl * data: 请求参数, 格式为:{param :param} * func : 回调处理方法 格式为 function(result){} * @param arg */ ajaxPost : function(arg){ $.ajax({ url : baseUrl + '/' +arg.url, type : 'post', dataType : 'json', data : arg.data, success : function(result){ checkSession(result);//检查session arg.func.call(this,result); } }); } });
我们可以使用ajaxPost方法来代替ajax方法(这里只封装了post类型),并且不用在每次请求时再手动的编写checkSession代码。
这只是call与apply应用的一个小例子,一般在框架中会经常出现call与apply。
相关推荐
JavaScript中call与apply方法
在JavaScript中,`call`和`apply`是两个非常重要的方法,它们都用于改变函数调用时的上下文(即`this`的值),并且可以灵活地传递参数。本篇文章将深入探讨这两个方法的用法、区别以及实际应用场景。 `call`方法...
在JavaScript中,`call`和`apply`是两种非常重要的函数调用方式,它们都用于改变函数内部`this`的指向,实现函数的动态绑定。这两个方法都是Function对象的原型方法,可以应用到任何函数上。 首先,让我们深入理解`...
其实,ES5 引入 bind 的真正目的是为了弥补 call/apply 的不足,由于 call/apply 会对目标函数自动执行,从而导致它无法在大事绑定函数中使用,而 bind 在实现转变函数 this 的同时又不会执行对应的函数。...
javascript callApply代码示例
总的来说,`call`和`apply`是JavaScript中实现动态上下文绑定和灵活参数传递的重要工具,对于理解和使用JavaScript的高级特性,如原型继承、函数封装和异步处理等,具有至关重要的地位。掌握它们的用法能够极大地...
淡淡简单描述javascript中方法apply和call
### 理解JavaScript中的`caller`, `callee`, `call`, `apply` #### Arguments对象:JavaScript函数调用的参数管理器 在JavaScript中,每个函数都有一个隐含参数`arguments`,它允许开发者访问传递给函数的所有参数...
1、call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的使用...
在JavaScript中,`call` 和 `apply` 是两种非常重要的函数调用方式,它们都用于改变函数执行时的上下文,即`this`的指向。本文将深入探讨这两种方法的用法及其在实际编程中的应用。 ### 1. `call` 的基本用法 `...
本文实例分析了JavaScript中call和apply方法的区别。分享给大家供大家参考,具体如下: 这两个方法不经常用,但是在某些特殊场合中是非常有用的,下面主要说下它们的区别: 1、首先,JavaScript是一门面向对象的语言...
`call`方法可以用来模拟继承,通过在子函数中使用父函数的`call`来继承父函数中的属性和方法。例如: ```javascript function Father() { this.father = 'father'; } function Child() { Father.call(this); ...
本文针对JavaScript中三个重要的函数方法——call、apply和bind,进行详尽的分析,并在文章的结尾部分对这三个方法之间的联系和区别进行了概括,以便于读者更深入地理解它们的用途和应用场景。 首先,我们来探讨...
本文将详细解释JavaScript中call(), apply(), 和 bind() 方法的作用、语法以及使用场景,并且会探讨回调函数的使用,帮助理解这些概念在实际编程中的应用。 首先,我们来探讨call() 和 apply() 方法。这两个方法都...
call和apply是JavaScript中的两个重要方法,它们都是Function.prototype中的方法,这意味着每个函数都可以使用这两个方法。它们的作用是改变函数体内的this对象的值,以扩充函数赖以运行的作用域。 相同点:call和...
JavaScript中的`call`和`apply`是两种非常重要的方法,它们都用于改变函数内部`this`的指向,并执行该函数。这两个方法都是Function对象的原型方法,因此所有的函数都具备`call`和`apply`。 1. `call`方法: - `...
JavaScript中的`call`和`apply`是两种非常关键的方法,它们允许我们改变函数内部`this`的指向,同时也为实现模拟继承提供了可能。虽然JavaScript不直接支持类继承,但通过`call`和`apply`,我们可以实现类似的效果。...
在JavaScript中,`call`和`apply`是两个非常重要的函数,它们都允许开发者改变函数执行时的上下文,即`this`的指向。这两个方法主要用于实现函数的绑定和继承,以及处理数组或类数组对象。 首先,我们来看`call`的...