JavaScript中call和apply方法的区别实例分析
程序员文章站
2022-06-22 14:40:32
本文实例分析了javascript中call和apply方法的区别。分享给大家供大家参考,具体如下:
这两个方法不经常用,但是在某些特殊场合中是非常有用的,下面主要说下它...
本文实例分析了javascript中call和apply方法的区别。分享给大家供大家参考,具体如下:
这两个方法不经常用,但是在某些特殊场合中是非常有用的,下面主要说下它们的区别:
1、首先,javascript是一门面向对象的语言,也就是说它有this
的概念。而且javascript是一门动态类型语言,为什么说它是动态类型语言呢?因为javascript在编译时没有类型检查的过程,不会去检查创建的对象类型,也不会去检查传递的参数类型,所以它的变量类型在运行期间是可以改变的。
2、要知道call
和apply
都是为了改变某个函数运行时的上下文(context)而存在的,也就是为了改变函数,也可以说是对象(函数本身就是对象)内部this
的指向而存在的。
3、二者区别为:传参数的方式不一样,如下:
func.call(this, arg1, arg2); func.apply(this, [arg1, arg2]);
上面也很清楚了,call
传参数时,明确知道时几个参数或者参数较少时,比如arg1、arg2,挨个传就是了;
而apply
第二个参数必须为一个数组,即将参数放进数组中即可。
4、实例
(function(){ array.prototype.push.call(arguments, 4);//arguments借用array.prototype.push方法 console.log( arguments ); //输出: [1, 2, 3, 4] })(1, 2, 3); var currying = function(fn){ var args = []; return function(){ if( arguments.length === 0){ return fn.apply( this, args); } else{ [].push.apply( args, arguments); return arguments.callee; //callee已弃用 } } }; var cost = (function(){ var money = 0; return function(0{ for(var i = 0,l - arguments.length;i<l;i++){ money += arguments[i]; } return money; } })();
调用:
var cost_ = currying(cost); //将cost转化成curring函数 cost_(1); cost_(2); alert(cost_()); //输出:3
解释:通过currying
(柯里化)的转化,在cost_
中传入参数时,未能得到值,而是将值存储起来,直到当无参数传入时,输出结果。
更多关于javascript相关内容可查看本站专题:《javascript常用函数技巧汇总》、《javascript面向对象入门教程》、《javascript错误与调试技巧总结》、《javascript数据结构与算法技巧总结》及《javascript数学运算用法总结》
希望本文所述对大家javascript程序设计有所帮助。
上一篇: redis分布式锁的问题与解决方法
推荐阅读
-
javascript基于原型链的继承及call和apply函数用法分析
-
JSz中的静态方法和实例方法的分析
-
Javascript中类式继承和原型式继承的实现方法和区别之处
-
浅谈JavaScript中的apply/call/bind和this的使用
-
JavaScript中toLocaleString()和toString()的区别实例分析
-
js中apply()和call()的区别与用法实例分析
-
JavaScript中的模拟事件和自定义事件实例分析
-
jq中bind方法与on方法的区别实例分析
-
使用JS简单实现apply、call和bind方法的实例代码
-
JavaScript中的this,call,apply使用及区别详解