javascript中call,apply,callee,caller用法实例分析


Posted in Javascript onJuly 24, 2019

本文实例讲述了javascript中call,apply,callee,caller用法。分享给大家供大家参考,具体如下:

实践一:call,apply 用来让一个对象去调用本不属于自己的方法,两者都可以传递参数,call的参数是列表形式,apply的参数是数组形式

var person = {
 "name":"Tom",
 "say":function(){
 console.log("person say");
 },
 "count":function(x,y,z){
 console.log('x= ' + x + ', y= ' + y + ', z= ' + z);
 },
 "sayName":function(){
 console.log(this.name);
 }
}
// 下面的示例是数组 arr 去调用person的say方法 , 这里call用来让数组调用本不属于它自己的方法
var arr = [1,2];
person.say.call(arr);
// call 还可以传递参数
person.count.call(arr,1,2,3); // x= 1, y= 2, z= 3
// apply 还可以这样
person.count.apply(arr,[1,2,3]); // x= 1, y= 2, z= 3

实践二:call,apply 用来修改this,   同样引用上例的person对象

var program = {"name":"AlphaGo"}
person.sayName.call(program); // AlphaGo
person.sayName.apply(program); // AlphaGo

实践三:call,apply把伪数组转换为数组

// call,apply 把伪数组转换为数组
var wArr = {0:"hello",1:"world","length":2};
var arr1 = Array.prototype.slice.call(wArr);
var arr2 = Array.prototype.slice.apply(wArr);
console.log(arr1); // [hello,world]
console.log(arr2); // [hello,world]

这里找到一篇详细的  关于伪数组的文章

实践四:单纯的arguments对象

// 有关arguments
function count(a,b,c){
 console.log(arguments.length);
 if(count.length === arguments.length) {
 console.log('实际参数与形参个数相同');
 }else{
 console.log('实际参数与形参个数不同');
 }
}
count(1,2,3); // 实际参数与形参个数相同
count(1,2); // 实际参数与形参个数不同
/*
这里count.length 表示形参个数
arguments.length 表示实参个数
*/

实践五:caller 用于查看,函数本身被哪个函数调用

function fn1(){
 if(fn1.caller){
 console.log(fn1.caller.name + " 是函数fn1的调用者");
 }else{
 console.log("直接执行");
 }
}
function fn2(){
 fn1();
};
fn2(); // fn2是是函数fn1的调用者

实践六:callee 返回正被执行的 Function 对象,常用于匿名函数的递归与arguments一起配合使用。

var sum = function(n){
 if(n>0) {
 return n + arguments.callee(n-1);
 }
 return 0;
};
var total = sum(10);
console.log(total); // 55
// arguments.callee 代指函数自身。
function test(){
 console.log(arguments.callee);
}
test(); // 输出函数自身的字符串表达式

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Google Map API更新实现用户自定义标注坐标
Jul 29 Javascript
IE 条件注释详解总结(附实例代码)
Aug 29 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
Feb 23 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
Jan 22 Javascript
JS中类或对象的定义说明
Mar 10 Javascript
jQuery删除当前节点元素
Dec 07 Javascript
微信小程序之仿微信漂流瓶实例
Dec 09 Javascript
jQuery图片加载失败替换默认图片方法汇总
Nov 29 jQuery
angular实现input输入监听的示例
Aug 31 Javascript
详解js加减乘除精确计算
Mar 19 Javascript
node.js基于socket.io快速实现一个实时通讯应用
Apr 23 Javascript
HTML+JS实现在线朗读器
Feb 15 Javascript
javascript关于“时间”的一次探索
Jul 24 #Javascript
javascript面向对象三大特征之封装实例详解
Jul 24 #Javascript
解决vue-cli webpack打包开启Gzip 报错问题
Jul 24 #Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
Jul 24 #Javascript
JavaScript面向对象中接口实现方法详解
Jul 24 #Javascript
IE11下处理Promise及Vue的单项数据流问题
Jul 24 #Javascript
微信小程序如何引用外部js,外部样式,公共页面模板
Jul 23 #Javascript
You might like
在线竞拍系统的PHP实现框架(二)
2006/10/09 PHP
php面向对象的方法重载两种版本比较
2008/09/08 PHP
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
PHP的全局错误处理详解
2016/04/25 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
10个实用的脚本代码工具
2010/05/04 Javascript
js读取cookie方法总结
2014/10/31 Javascript
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
js实现带圆角的多级下拉菜单效果
2015/08/28 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
jQuery遍历节点方法汇总(推荐)
2017/05/13 jQuery
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
Django 2.0版本的新特性抢先看!
2018/01/05 Python
Python判断是否json是否包含一个key的方法
2018/12/31 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
2019/09/10 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
英语系毕业生自荐信
2013/10/31 职场文书
空乘英文求职信
2014/04/13 职场文书
禁毒宣传活动总结
2014/08/26 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
酒店财务总监岗位职责
2015/04/03 职场文书
2015年村计划生育工作总结
2015/04/28 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
预备党员转正意见
2015/06/01 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS