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 相关文章推荐
javaScript 关闭浏览器 (不弹出提示框)
Jan 31 Javascript
原生js实现查找/添加/删除/指定元素的class
Apr 12 Javascript
JavaScript用Number方法实现string转int
May 13 Javascript
express的中间件bodyParser详解
Dec 04 Javascript
jQuery中get()方法用法实例
Dec 27 Javascript
jquery显示loading图片直到网页加载完成的方法
Jun 25 Javascript
JavaScript 身份证号有效验证详解及实例代码
Oct 20 Javascript
jQuery实现ToolTip元素定位显示功能示例
Nov 23 Javascript
JavaScript中的遍历详解(多种遍历)
Apr 07 Javascript
详解在React里使用"Vuex"
Apr 02 Javascript
Vue使用NPM方式搭建项目
Oct 25 Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
Oct 25 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
第十二节--类的自动加载
2006/11/16 PHP
php微信公众平台开发之微信群发信息
2016/09/13 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
2020/08/11 PHP
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
详解数组Array.sort()排序的方法
2020/05/09 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
2018/07/07 Javascript
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
微信小程序实现按字母排列选择城市功能
2019/11/25 Javascript
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
Django实现自定义404,500页面教程
2017/03/26 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
Python基于多线程操作数据库相关问题分析
2018/07/11 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
django实现web接口 python3模拟Post请求方式
2019/11/19 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
详解python中的lambda与sorted函数
2020/09/04 Python
python ssh 执行shell命令的示例
2020/09/29 Python
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
医学专业毕业生推荐信
2013/11/14 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
《数星星的孩子》教学反思
2014/04/11 职场文书
会展策划与管理专业求职信
2014/06/09 职场文书
端午节活动总结
2014/08/26 职场文书
装修活动策划方案
2014/08/27 职场文书
青年文明号申报材料
2014/12/23 职场文书
干部培训简讯
2015/07/20 职场文书
养成教育主题班会
2015/08/13 职场文书
python前后端自定义分页器
2022/04/13 Python