理解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 相关文章推荐
jquery 插件 人性化的消息显示
Jan 21 Javascript
ppk谈JavaScript style属性
Oct 10 Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
Sep 05 Javascript
分享一些常用的jQuery动画事件和动画函数
Nov 27 Javascript
JS实现漂亮的时间选择框效果
Aug 20 Javascript
js实现模糊匹配功能
Feb 15 Javascript
vue-axios使用详解
May 10 Javascript
js实现方块上下左右移动效果
Aug 17 Javascript
node跨域请求方法小结
Aug 25 Javascript
Vue 2.0双向绑定原理的实现方法
Oct 23 Javascript
ES6中的Javascript解构的实现
Oct 30 Javascript
node.js如何自定义实现一个EventEmitter
Jul 16 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
77A一级收信机修理记
2021/03/02 无线电
php引用地址改变变量值的问题
2012/03/23 PHP
php在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
Yii2 RESTful中api的使用及开发实例详解
2016/07/06 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
Jquery+WebService 校验账号是否已被注册的代码
2010/07/12 Javascript
JavaScript设置首页和收藏页面的小例子
2013/11/11 Javascript
js 操作符汇总
2014/11/08 Javascript
AngularJS的一些基本样式初窥
2015/07/27 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
Nuxt升级2.0.0时出现的问题(小结)
2018/10/08 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
python+selenium开发环境搭建图文教程
2017/08/11 Python
Python中return self的用法详解
2018/07/27 Python
Python小白必备的8个最常用的内置函数(推荐)
2019/04/03 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
将python运行结果保存至本地文件中的示例讲解
2019/07/11 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
医学专业毕业生个人求职信
2013/12/25 职场文书
小摄影师教学反思
2014/04/27 职场文书
品质口号大全
2014/06/17 职场文书
2014年群众路线党员自我评议
2014/09/24 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
机关干部作风整顿心得体会
2016/01/22 职场文书
公证书
2019/04/17 职场文书
python解析照片拍摄时间进行图片整理
2022/07/23 Python