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比较文档位置
Apr 08 Javascript
让任务管理器中的CPU跳舞的js代码
Nov 01 Javascript
Js 随机数产生6位数字
May 13 Javascript
$.ajax返回的JSON无法执行success的解决方法
Sep 09 Javascript
下载文件个别浏览器文件名乱码解决办法
Mar 19 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
Dec 04 Javascript
jQuery实现简单二级下拉菜单
Apr 12 Javascript
Vue.js教程之计算属性
Nov 11 Javascript
详解Eslint 配置及规则说明
Sep 10 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
Jun 10 Javascript
微信小程序如何引用外部js,外部样式,公共页面模板
Jul 23 Javascript
Vue使用路由钩子拦截器beforeEach和afterEach监听路由
Nov 16 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
eWebEditor v3.8 商业完整版 (PHP)
2006/12/06 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
js中小数转换整数的方法
2014/01/26 Javascript
js和C# 时间日期格式转换的简单实例
2016/05/28 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
Js中使用正则表达式验证输入是否有特殊字符
2018/09/07 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
python爬虫常用的模块分析
2014/08/29 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
使用Python实现微信提醒备忘录功能
2018/12/04 Python
django云端留言板实例详解
2019/07/22 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
python实现门限回归方式
2020/02/29 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
HTML5自定义属性的问题分析
2019/08/16 HTML / CSS
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
Ruby如何定义一个类
2012/10/08 面试题
出生医学证明样本
2014/01/17 职场文书
上课睡觉检讨书
2014/01/28 职场文书
大学校庆策划书
2014/01/31 职场文书
中式结婚主持词
2014/03/14 职场文书
小学新学期寄语
2014/04/02 职场文书
2014年教师节座谈会发言稿
2014/09/10 职场文书
小学四年级班主任工作经验交流材料
2015/11/02 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书
JavaScript实现班级抽签小程序
2021/05/19 Javascript
python scipy 稀疏矩阵的使用说明
2021/05/26 Python
python内置进制转换函数的操作
2021/06/02 Python