call方法 java_漫谈JS中的call和apply方法

call和apply方法网上相关文章很多,大多是用简单的代码demo举例,这里用打比方的方式瞎扯下这两个方法到底是干嘛的?

回答这个问题前,先要明确一点,就是“JS是一门面向对象的语言”,JS处处是对象,而对象就是一个同时包含属性和方法的整体。比如数组对象Array,就有length属性,也有shift方法。“对象”就像一个家庭,“属性”就是家里的没有生命的家电家具,“方法”则是家庭的人类成员。

假设王家是穷光蛋,家徒四壁,李家是土豪,应有尽有。这是王家的儿子想过李家的日子,他要怎么办?最简单的方法就是改姓“入赘”成为李家人,成了一家人后,李家的东西就随便王二用了。这个“入赘”改姓入籍别人家享福的行为在JS世界就叫call或者apply。入赘别人家后自己老家的东西还能不能用呢?答案是一样用,JS的call和apply也是这样。

比如代码obj1.fn1.call(obj2)的意思在客观世界就是,obj1家的穷光蛋fn1入赘到obj2家,然后穷光蛋fn1就可以随便用土豪obj2家的东西了。同时,obj1.fn1.call(obj2)和obj1.fn1.apply(obj2)功能是一样的,那apply和call有啥区别呢?它们的区别就在传参的方式上,call和apply的第一个参数都是对象名(要入赘的家庭),后面都是参数,区别就是call的参数要一个个传,像obj1.fn1.call(obj2,1,2,3)这样,但是apply要用数组打包一起传,像obj1.fn1.call(obj2,[1,2,3])这样。

这里说call和apply是“入赘”的意思也不合适,感觉比喻成"结婚"更合适,参与结婚的人就同时成为了两家的人,然后两家的东西都可以用。再回到代码代码obj1.fn1.call(obj2)的意思,那就应该说是,obj1家的fn1嫁到obj2家,从此fn1在obj1和obj2家都像自己自己家一样,东西随便用。不过,一般用了aplly方法后,主要是想用obj2对方家的东西.

有的人可能会说,你能不能不扯淡,给我用可以运行的代码举个例子说说,那我就自荐一篇自己之前的文章:《apply和call对this的影响》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值