问题请看代码中的注解:
//回调函数1
function callback(a,b,c)
{
alert(a+b+c);
}
//回调函数2
function callback2(a,b)
{
alert(a+b);
}
//这个方法做了一些操作、然后调用回调函数
function doCallback(fn,args)
{
//do something
if(args.length==2)
{
fn.call(this,args[0],args[1])
}
if(args.length==3)
{
fn.call(this,args[0],args[1],args[2])
}
//假如参数有很多个的话 应该怎么写?难道一致if下去吗?
}
function test()
{
//动态调用方法、并传递参数
doCallback(callback2,['a','b']);
doCallback(callback,['a','b','c']);
}
后来经过网友的帮助又找到了一种解决的方法
//回调函数1
function callback(a,b,c)
{
alert(a+b+c);
}
//回调函数2
function callback2(a,b)
{
alert(a+b);
}
//这个方法做了一些操作、然后调用回调函数
function doCallback(fn,args)
{
var executeStr="fn.call(this,@)";
for(var i =0;i<fn.length;i++)
{
executeStr = executeStr.replace("@","args["+i+"],@");
}
executeStr=executeStr.replace(",@","");
eval(executeStr);
}
function test()
{
//动态调用方法、并传递参数
doCallback(callback2,['a','b']);
doCallback(callback,['a','b','c']);
}
最后发现、最佳的实现方式是:
//回调函数1
function callback(a,b,c)
{
alert(a+b+c);
}
//回调函数2
function callback2(a,b)
{
alert(a+b);
}
//这个方法做了一些操作、然后调用回调函数
function doCallback(fn,args)
{
fn.apply(this, args);
}
function test()
{
//动态调用方法、并传递参数
doCallback(callback2,['a','b']);
doCallback(callback,['a','b','c']);
}
通过以上三种方法更加清晰的看到apply在javascript中的作用、以及其强大的功能
分享到:
相关推荐
[参数1,参数2…]是可选的,用于表示实参列表,其值可以是零个、一个或多个。 5.2.2 函数的调用方式 2、函数的调用方式 作为对象的方法调用,当一个函数被设置为对象的属性值时,称之为方法。使用点语法可以调用一个...
JavaScript中的函数对象调用模式是编程中至关重要的概念,它涉及到函数作为一等公民、作用域、闭包、原型链等多个核心知识点。这篇博客通过深入分析JavaScript中的函数调用模式,帮助开发者更好地理解和掌握这些概念...
JavaScript中的`apply()`方法是函数调用的一种方式,它允许我们改变函数内部`this`的指向,并且可以灵活处理参数传递。在JavaScript中,`this`关键字通常表示函数执行时的上下文,即函数被调用的位置。`apply()`方法...
`apply()`是JavaScript中函数对象的一个方法,它允许我们调用一个函数,并可以自定义函数执行时的上下文(`this`值)以及传入参数。这个方法对于理解和操作JavaScript中的函数和对象关系至关重要。 在JavaScript中...
在JavaScript编程中,有时我们需要在特定条件下同时调用多个函数,以实现一系列的处理或操作。这在构建复杂的用户交互和动态页面时尤其常见。本文将深入探讨如何在JavaScript中实现这一目标,通过一个简单的实例来...
高阶函数是指可以接受一个或多个函数作为输入,并可能返回一个新的函数的函数。这些函数通常用作工具,它们能对一组函数进行操作,如映射(map)、过滤(filter)和reduce等。 3. **闭包** 在函数做参数时,闭包...
这在需要多次调用同一个函数或者在特定条件下调用时非常有用: ```javascript // 函数赋值给变量 var abc = test; // 用变量调用函数 abc('中国'); // 输出 "你输入的是 中国" ``` 但需要注意,如果在赋值过程中...
如果需要在ES5中动态创建对象时传入动态数量的参数,我们可以先用`apply`将参数应用到构造函数上,或者利用`bind`预先绑定参数,然后再用`new`关键字来创建实例。 例如,我们有一个`Foo`类,需要传入动态数量的参数...
在JavaScript编程中,setTimeout() 是一个非常有用的函数,它允许我们设置一个定时器,指定时间后执行一个函数。但是,当我们要在 setTimeout() 中调用一个需要参数的函数时,可能会遇到问题。因为 setTimeout() ...
在JavaScript中,`apply`和`call`是两种非常重要的函数调用方式,它们都用于改变函数内部`this`的指向以及动态传递参数。这两者的主要区别在于参数的传递方式。 首先,`this`在JavaScript中是一个关键字,它在不同...
JavaScript中的函数是一段可重复执行的代码块,它在定义一次之后可以被执行和调用多次。函数是对象,这意味着它们不仅可以像其他JavaScript对象那样被操作,还可以像变量那样传递。这一特性使得函数在JavaScript中被...
JavaScript中的函数调用可以使用多种形式,最基本和常见的就是直接调用函数,但在某些场景下,我们可能会使用到更为动态和灵活的调用方式,比如通过call和apply方法进行调用。这两种方式在功能上有相似之处,但具体...
apply方法在功能上与call方法相似,它也允许调用函数,不同的是apply接受的是一个包含多个参数的数组,这在需要动态传入参数时特别有用。例如,fun1.apply(null)和fun2.apply(null, ['我被调用了'])。这种方式可以很...
这个技巧允许我们将一个接受多个参数的函数转换为一系列只接受一个参数的函数,每个新函数都保存了上一次调用的状态,直到所有参数都被提供或者达到预期的计算条件。 在JavaScript中,柯里化通常通过闭包实现,它...
区别在于,call()方法接受一系列参数,而apply()方法接受一个包含多个参数的数组。这种调用方式提供了灵活控制函数执行上下文的能力,非常适合在需要动态改变this指向的情况下使用。 关于函数参数传递,JavaScript...
高阶函数是接受一个或多个函数作为参数,或者返回一个新的函数的函数。在JavaScript中,`map`、`filter`、`reduce`等方法都是高阶函数的例子,它们用于操作数组,而`compose`和`curry`则用于组合和封装函数。 4. ...
JavaScript中的函数柯里化(Currying)是一种将接受多个参数的函数转换成一系列接受单一参数的函数的技术。这种技术源自于数学家Haskell Brooks Curry的名字,它的主要思想是每次只处理一个参数,然后返回一个新的...
高阶函数是接受一个或多个函数作为参数,或者返回一个函数的函数。JavaScript中的`Array`对象提供的`map`, `filter`, `reduce`等方法都是高阶函数的例子,它们可以用于处理数组,同时保持代码简洁和可读性。 ...
- 接受一个或多个函数作为参数,并返回一个新的函数的函数称为高阶函数,如`Array.prototype.map()`、`Array.prototype.filter()`等。 - 高阶函数可以用于函数组合、函数工厂、回调函数等场景。 9. 轮询与递归: ...