理解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 相关文章推荐
XP折叠菜单&仿QQ2006菜单
Dec 16 Javascript
javascript打开word文档的方法
Apr 16 Javascript
js清空表单数据的两种方式(遍历+reset)
Jul 18 Javascript
js+canvas简单绘制圆圈的方法
Jan 28 Javascript
遍历js中对象的属性和值的实例
Nov 21 Javascript
详解如何较好的使用js
Dec 16 Javascript
js实现导航栏中英文切换效果
Jan 16 Javascript
jQuery实现百度登录框的动态切换效果
Apr 21 jQuery
10个最优秀的Node.js MVC框架
Aug 24 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
Dec 25 jQuery
js图数据结构处理 迪杰斯特拉算法代码实例
Sep 11 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
Nov 07 Javascript
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
PHP编程之高级技巧——利用Mysql函数
2006/10/09 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
2011/07/08 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
js验证整数加保留小数点的简单实例
2013/12/02 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
JS模态窗口返回值兼容问题的完美解决方法
2016/05/28 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
Node.js的基本知识简单汇总
2016/09/19 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
vue计算属性及使用详解
2018/04/02 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
Python中顺序表的实现简单代码分享
2018/01/09 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
Python单链表原理与实现方法详解
2020/02/22 Python
Brother加拿大官网:打印机、贴标机、缝纫机
2019/10/09 全球购物
党员年终民主评议的自我评价
2013/11/05 职场文书
上课迟到检讨书
2014/01/19 职场文书
爷爷追悼会答谢词
2014/01/24 职场文书
党员教师个人对照检查材料范文
2014/09/25 职场文书
委托培训协议书
2014/11/17 职场文书
课外活动实习计划
2015/01/19 职场文书
担保书范本
2015/01/20 职场文书
医院财务人员岗位职责
2015/04/14 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
mysql 获取时间方式
2022/03/20 MySQL