理解Javascript的call、apply


Posted in Javascript onDecember 16, 2015

call 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法.

注意:该函数的语法与 apply() 方法的语法几乎完全相同,唯一的区别在于,apply()方法接受的是一个参数数组,而 call()方法接受的是一系列参数列表。

了解完这两个方法的概念后,我们来一步一步理解他们的应用.

改变方法内this的指向
我们先来看下面这个例子

var name = "编程的人";
var age = 1;
var person = {
name:"公众号:bianchengderen",
age:20
}
function say(){
console.log("我叫:"+this.name+",年龄:"+this.age)
}
say();// 我叫: 编程的人,年龄: 1
say.call(person);//年龄:20

这两种调用执行的方式不一样,他们的结果也不一样,不一样在于say方法里面的this指向了不同的对象,第一次执行指向的是window,而我们以call方式执行,将say方法里面的this指向了person对象.
这是不是有点冒充别人的感觉.那我们这样有什么作用了?当然自己可以多多想想,到底能做什么! 我们继续往下面走.

实现继承机制
继承,这是高级面向对象的一种特性,用call我们可以将JAVASCRIPT有这种特点.
在看下面这个例子之前,必须好好理解上面的例子.

function Person(){
this.name = "编程的人";
this.age = 20;
}
function Student(){
Person.call(this);
this.school = "地球";
}
var student = new Student();
//下面打印出来: 编程的人,20,地球
console.log(student.name,student.age,student.school);

在这个例子里,Student函数继承了Person的name和age属性,就是通过Person.call(this)来实现,理解上面的例子后,应该是不难理解的.所以Student即拥有了Person的特点,又有自己的个性,比如这个this.school.

在这里,我们没有涉及到加入参数的传递,是方便大家的理解,需要加入参数传递,大家可以敲代码试一试,看看效果怎么样!

我们就先讲这两个例子吧,之后再进行深入学习。

Javascript 相关文章推荐
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
Jan 23 Javascript
JavaScript中的运算符种类及其规则介绍
Sep 26 Javascript
JavaScript中的apply和call函数详解
Jul 20 Javascript
Enter回车切换输入焦点实现思路与代码兼容各大浏览器
Sep 01 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
May 07 Javascript
javascript消除window.close()的提示窗口
May 20 Javascript
深入理解js promise chain
May 05 Javascript
Angular的事件和表单详解
Dec 26 Javascript
微信小程序实现时间预约功能
Nov 27 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
May 16 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
Oct 23 jQuery
如何使用jQuery操作Cookies方法解析
Sep 08 jQuery
javascript实现网站加入收藏功能
Dec 16 #Javascript
javascript实现无缝上下滚动特效
Dec 16 #Javascript
js实现将选中内容分享到新浪或腾讯微博
Dec 16 #Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
Dec 16 #Javascript
Sublime Text 3常用插件及安装方法
Dec 16 #Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
Dec 16 #Javascript
基于JavaScript获取鼠标位置的各种方法
Dec 16 #Javascript
You might like
德生PL450的电路分析和低放电路的改进办法
2021/03/02 无线电
php中使用explode查找某个字符是否存在的方法
2011/07/12 PHP
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
情人节之礼 js项链效果
2012/02/13 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
js清理Word格式示例代码
2014/02/13 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
JavaScript前端开发之实现二进制读写操作
2015/11/04 Javascript
理解javascript封装
2016/02/23 Javascript
jQuery中判断对象是否存在的方法汇总
2016/02/24 Javascript
javascript日期比较方法实例分析
2016/06/17 Javascript
基于Bootstrap仿淘宝分页控件实现代码
2016/11/07 Javascript
Bootstrap基本插件学习笔记之Tooltip提示工具(18)
2016/12/08 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
JS async 函数的含义和用法实例总结
2020/04/08 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
netbeans7安装python插件的方法图解
2013/12/24 Python
Python实现感知器模型、两层神经网络
2017/12/19 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
Python实现全排列的打印
2018/08/18 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
护理学毕业生自荐信
2013/10/02 职场文书
自我鉴定思想方面
2013/10/07 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
2015年试用期自我评价范文
2015/03/10 职场文书
导游词之阳朔遇龙河
2019/12/16 职场文书
python必学知识之文件操作(建议收藏)
2021/05/30 Python