12.call和apply的用法
来源:互联网 发布:心理学与生活 知乎 编辑:程序博客网 时间:2024/06/08 18:34
一些应该掌握的知识点
this是JS中的一个关键字,它代表函数运行时自动生成的一个内部对象,且只能在函数内部使用
一个this案例展示this的普通用法
“` JavaScript
var sample = {
x: ‘sample’,
show: function () {
console.log(this.x);
}
}show(); //控制台显示sample
“`假设有函数sample,可知sample.call()等同于sample();
call和apply都用于指定this的指向,也可以理解为指定this的指向
- 一个call案例展示call的普通用法
var a = { x: 'A', show: function () { console.log(this); }}a.show(); //此时this指向对象a,控制台显示x的值为字符串"A"var c = a.show; //把对象a中的show属性(也是show函数)赋予变量c,注1var b = { x: 'B'}a.show.call(b); //此时this指向对象b,控制台显示x的值为字符串"B"c(); //由注1可知,此时this指向window,因此控制台显示对象window
- 一个call案例展示call的普通用法
call可用于借助他人之手来办事
一个阿妈请阿爸教训不听话的儿子的案例
function Mom () { Dad.call(this); //阿妈请阿爸教训不听话的儿子}function Dad () { this.teachSon1 = '儿子大哭'; //教育手段 this.teachSon2 = '儿子大叫';}function Son () { Mom.call(this); this.getTeach = function () { //不听话的儿子能被教育 this.reaction1 = this.teachSon1; this.reaction2 = this.teachSon2; } this.show = function () { //展示不听话的儿子被教育的反应 this.getTeach(); console.log(this.reaction1, this.reaction2); }}var son = new Son();son.show(); //控制台显示儿子大哭、儿子大叫
由上例可看出这种call的使用方式也是一种继承
call和apply的区别和传参用法
- call和apply不仅可以用来指定this的指向,还可以用来传参数,
- call和apply两者本质作用相同,区别仅仅是后面所传的参数形式不同
- 一个案例阐述call和apply的传参用法和区别
var A = { tag: 'Object A', show: function (x, y) { console.log(x, y, this.tag); }}var B = { tag: 'Object B'}A.show.call(null, 1, 2); /* 用.call方式指定this的指向 同时传参数,由于call中首参 为null,所以此时this的指向 为对象window,控制台显示 1, 2, undefined */A.show.call(B, 1, 2); /* 由于call中首参为B,所以此时 this的指向为对象B,控制台 显示1, 2, Object B*/A.show.apply(A, [1, 2]); /* apply与call的区别是, apply用于传参时所传参数 用数组来传, 控制台显示 1, 2, Object A*/
关于call和apply用法的一篇博客参考:ITye uule:JS中的call()和apply()方法
阅读全文
0 0
- 12.call和apply的用法
- apply和call的用法
- apply 和call的用法
- apply 和call的用法
- apply和call的用法
- call和apply的用法
- call和apply用法
- call 和apply用法
- call和apply的用法和区别
- call和apply的区别和用法
- call和apply的区别和用法
- call和apply的用法和区别
- javascript的call 和apply的用法
- javascript的apply和call用法
- js中call和apply的用法
- js中call和apply的用法
- 【js】apply和call的用法
- JS call和apply的用法
- COURSE 1 Neural Networks and Deep Learning
- Azkaban-开源任务调度程序(使用篇)
- 欢迎使用CSDN-markdown编辑器
- 开机报 BOOT BCD ,并无法进系统
- IRLS 迭代加权最小二乘
- 12.call和apply的用法
- 解决{dede:field.body/}不解析
- Android实时取景:用SurfaceView实现 -- Camera
- RedHat Enterprise Linux 6 使用 Centos 6 的yum
- 728. Self Dividing Numbers
- Android Intent和Intent过滤器
- Linux下安装JDK和配置环境变量
- win7 域环境客户端启动后进入登录界面黑屏
- 织梦的channelartlist和arclist标签无法在栏目页显示软件的下载