JS面向对象--call()和apply()

这两个函数都是函数的方法,只有函数能够打点call() apply(),表示指定的上下文执行这个函数

function fun(){
  alert(this.age);
}
var obj ={
  "name":"小明";
  "age": 12
}
fun();   //undefined

下面有一个函数fun,我们现在就是耍无赖,必须让fun里面的this是obj,此时可以用call,apply来指定上下文。

function fun(){
  alert(this.age);
}
var obj ={
  "name":"小明";
  "age": 12;
  "f":fun
}
obj.f(); //12
fun.call(obj);   //12
fun.apply(obj);

语法:
函数.call(上下文)
函数.apply(上下文)

两个函数的区别是,体现在参数上
此时我们要执行的fun函数可以接受参数,apply需要用数组体现这些参数,而call必须用逗号隔开,录取期间所有参数:

function fun(a,b,c){
  alert(a+b+c)
  alert(this.age);
}
var obj ={
  "name":"小明";
  "age": 12;
  "f":fun
}

fun.call(obj,6,7,8);   
fun.apply(obj,[6,7,8]);  

没有别的区别了,就是传参数的区别

有什么用?看看求数组的最大值
我们知道Math.max()方法,只接受单独罗列的参数:
Math.max(4,55,88,34,789,21) //789
不能传入数组
Math.max([4,55,88,34,789,21]) //NaN
所以此时可以妙用apply,apply可以接受一个数组当做函数的“罗列”的参数
Math.max.apply(window,[4,55,88,34,789,21]) //789

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 哈哈(ಡωಡ)hiahiahia 我也不知道要写什么东西,夏天好热啊╰(‵□′)╯
    馨晴Sophia阅读 1,144评论 0 0
  • 铃声响了 教室是天然的温床 摇篮曲唱了 带我们进入梦乡 我来到一个梦幻的世界 一个人清醒的世界 我自由地玩乐 知识...
    何是深邃阅读 1,313评论 0 2
  • 历史课讲《史记》,每人要从书里选一个人物写论文,选了汉高祖妻吕后,选定了人就去看书,架构论文。吕后残忍,心机重,对...
    奔跑吧阿宁阅读 3,666评论 0 0
  • 文:宋考拉 最近在看《原则》这本书,看的后背发凉。 这本书的作者是雷达里奥,何方神圣呢?用李笑来老师的话说: 作者...
    宋明迅阅读 2,870评论 0 1