javascript学习笔记之apply()和call()

关于apply和call()的区别,之前在笔试的时候就遇到过几次,答题的时候都还停留在,参数的不同上,一直没有仔细探究过。认真看过几篇文章,才发现里面的确是有js这门语言的奥秘。

一、Function.prototype.apply() 和 Function.prototype.call()
在看《JavaScript高级程序设计》这本书时提到由于“对象冒充”这种继承方法的流行,使得ES3为Function对象加入了两个新方法即apply()和call()。

二、参数不同
参数不同这点在我看了stackoverflow difference between call and apply
之后变得容易记住,两者的第一个参数都是用作this的对象,而apply()的第二个参数是要传递给函数的参数的数组,call()除this外其他参数都直接传递给函数自身。

    theFunction.apply(valueForthis, arrayOfArgs);
    theFunction.call(valueForthis, arg1, arg2,... );
A useful mnemonic is "A for array and C for columns of args"
一个有用的记忆方法是,A意味着数组,而C意味着一列参数。

三、实现高级语言中的继承
apply和call作为Function对象的方法,即表示每个Function对象的实例都有apply()和call()方法。

    foo.apply(this, args) == foo.call(this, arg1, arg2, arg3) == this.foo(arg1, arg2, arg3) 

此处foo是一个方法,this是方法执行时上下文相关对象,arg1,arg2,arg3,是传给foo方法的参数,“方法执行时的上下文对象”可以类比为面向对象编程中,在类实例化后对象中的this。
在JavaScript中,代码总是有一个上下文对象,代码处理该对象之内,上下文是通过this变量来体现的,这个this变量永远指向当前代码所处的对象中。

举个栗子:
代码展示

输出结果:

结果输出
此处把one对象中firstFunc类中的output方法拿来给second对象用,这正是高级语言中继承的概念。使用多个call()可以实现多继承,

再举个例子:
代码展示

结果输出:
这里写图片描述

这样就实现了对象方法的多继承!
call()和apply()使得对象借用别人的方法来调用就像调用自己的一样。
厉害了javascript!

参考文章地址:关于javascript中apply()和call()方法的区别;
JS Call()与Apply();

如有错误,多多指教
next time~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值