美文网首页JavaScript渣渣到大神手册
JS面向对象--call()和apply()

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

作者: FF_C | 来源:发表于2017-11-30 19:48 被阅读0次

这两个函数都是函数的方法,只有函数能够打点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

相关文章

  • 学习总结目录

    javascript基础 js数据类型面向对象继承js的this指向自己实现call,apply,bindjs事件...

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

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

  • js中的继承(es5)

    这个问题事关js里面的很多难点的问题,诸如prototype,call和apply等,也是js面向对象的问题,值得...

  • 2018-12-21 Call 和 Apply

    JS中每个Function对象都有一个apply()方法和一个call()方法 apply 、call 则是立即调...

  • js中方法继承

    call 和 apply JS中的call()和apply()方法

  • call-apply 实现继承

    改变调用对象的两种方式: JS可以通过 call 和 apply 方法来实现继承 call(): ------ ...

  • JS高级学习:apply和call 的使用/bind方法/高阶函

    apply和call 的使用 apply和call的使用方法 apply的使用语法:函数名字.apply(对象,[...

  • apply和call用法

    apply和call用法 [程序员每日5分钟]轻松搞定 JS 的this、call和apply

  • call()和apply()的理解

    谈一谈js中call()和apply()方法 在最近看的js书中,提及到了,Math对象,有max和min方法,当...

  • apply 与 call

    apply apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性 call call:和apply的意...

网友评论

    本文标题:JS面向对象--call()和apply()

    本文链接:https://www.haomeiwen.com/subject/tarbbxtx.html