博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js的apply 和 call
阅读量:6533 次
发布时间:2019-06-24

本文共 1367 字,大约阅读时间需要 4 分钟。

总是没搞明白js的apply 和call,看到一篇文章+评论,终于搞明白了,记录下来

http://uule.iteye.com/blog/1158829

call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 

上述一个句号一个意思,体现在方向不同。第一个借用别人的函数,第二个借用别人的上下文环境。

function add(a,b){    alert(a+b);}function sub(a,b){    alert(a-b);}add.call(sub,3,1);  //4
个人理解call和apply的作用就是
切换函数的对象上下文
“这个例子中的意思是将add执行的上下文由window切换为sub,即this指向是从window变为sub。
 
修改上述例子:
function add(a,b)  {      this(a,b);    alert(a+b);  }  function sub(a,b)  {      alert(a-b);  }    add.call(sub,3,1);  //2    4

先打出2 然后 为4 ,可说明了:将add执行的上下文由window切换为sub,即this指向是从window变为sub。

 

再附其另一例子

function Animal(){        this.name = "Animal";        this.showName = function(){            alert(this.name);        }    }      function Cat(){        this.name = "Cat";    }       var animal = new Animal();    var cat = new Cat();        animal.showName.call(cat,",");    //cat//animal.showName.apply(cat,[]);

//通过call或apply方法,将animal的执行上下文改为cat,及此时animal.showName() 中的this指向cat,所以输出结果为‘Cat’

 

顺便记录下 javascript语言精粹上看到的一个例子

用来区分数组和对象(因为js的数组其实就是对象:var a=[];typeof(a)  //"object")

var is_array = function(value) {    return Object.prototype.toString.apply(value) === '[object Array]';     };
var a=[];Object.prototype.toString.apply(a)//"[object Array]"var a=[];a.toString()//""var a=[];Object.prototype.toString(a)//"[object Object]"

 

转载于:https://www.cnblogs.com/xnn1993/p/7597426.html

你可能感兴趣的文章
poj3262
查看>>
第四十天笔记
查看>>
4、动态代理
查看>>
Loj #6073.「2017 山东一轮集训 Day5」距离
查看>>
我的TCP/IP学习笔记
查看>>
shell--字符串的截取变量子串串
查看>>
Cas_个人理解
查看>>
UISearchController
查看>>
梦断代码阅读笔记02
查看>>
轮毂电机光电增量编码器的ABZ信号详解
查看>>
TextBox Template
查看>>
Linux MySQL 储存中文失败简单解决办法
查看>>
洛谷——P1330 封锁阳光大学
查看>>
css选择器
查看>>
zabbix-agent配置文件说明
查看>>
linux系统配置之bash shell的配置(centos)
查看>>
linux C 9*9
查看>>
hdu 1695: GCD 【莫比乌斯反演】
查看>>
python的string操作总结
查看>>
如何把word中的图片怎么导出来呢?
查看>>