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数组使用调用方法汇总
Dec 08 Javascript
Javascript的闭包
Dec 31 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
Jul 18 Javascript
用js代码改变单选框选中状态的简单实例
Dec 18 Javascript
js计算任意值之间随机数的方法
Jan 16 Javascript
javascript的switch用法注意事项分析
Feb 02 Javascript
javascript实现控制浏览器全屏
Mar 30 Javascript
window.location.reload 刷新使用分析(去对话框)
Nov 11 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
Jan 23 Javascript
jQuery实现调整表格单列顺序完整实例
Jun 20 Javascript
Webpack中publicPath路径问题详解
May 03 Javascript
vue实例中data使用return包裹的方法
Aug 27 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
IIS下配置Php+Mysql+zend的图文教程
2006/12/08 PHP
php画图实例
2014/11/05 PHP
php短址转换实现方法
2015/02/25 PHP
php解析http获取的json字符串变量总是空白null
2015/03/02 PHP
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
JS 终止执行的实现方法
2016/11/24 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
2013/01/17 Python
用python处理MS Word的实例讲解
2018/05/08 Python
python requests.post带head和body的实例
2019/01/02 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
tensorflow 只恢复部分模型参数的实例
2020/01/06 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
Python+Appium实现自动化测试的使用步骤
2020/03/24 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
美国克罗格超市在线购物:Kroger
2019/06/21 全球购物
商务英语本科生的自我评价分享
2013/11/15 职场文书
医学专业大学生求职的自我评价
2013/11/27 职场文书
会计专业自我评价
2014/02/12 职场文书
法制宣传标语
2014/06/23 职场文书
庆元旦活动总结
2014/07/09 职场文书
2014年营销工作总结
2014/11/22 职场文书
个园导游词
2015/02/04 职场文书
企业安全生产规章制度
2015/08/06 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书
flex弹性布局详解
2022/03/20 HTML / CSS
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库