为了账号安全,请及时绑定邮箱和手机立即绑定

直接用o.add(5,7)不就好了?为什么要用add.call(o,5,7)??

http://img1.sycdn.imooc.com//589535840001684a11120621.jpg

如图,都把我看蒙了

正在回答

2 回答

因为o对象的本身是没有定义add方法的,在这个案例中,add()方法定义在window上,所以就算你在外面add(5,7),这样去执行,其实还是在window对象上调用的add,相当于window.add(5,7);只是window上调用方法和属性的时候,前面的window可以默认不用写而已。

这就存在一个问题,o对象内部是没有add方法的,但是我想让它借用window对象的这个方法去实现我要的功能怎么办呢?这个时候就要用到call和apply。具体操作就是老师讲的:需要调用的函数名.call(需要调用这个方法的对象,参数1,参数2,...,参数N);其本质说白了就是将这个方法强拉硬拽地拖到o对象上,假装是o名义下的方法去为o对象服务和工作。

那这样有啥好处呢?好处就是方便重用和继承,这个后面OOP的章节肯定会讲。每当你定义一个函数,其实是在内存里开辟了一块空间来存放这个函数对象的,哪怕这两个函数每个字都一样,也是两个不同的对象,如果外部有了一个add函数,你为了让它能执行o对象里面的方法,又在o对象里在写一个o.add;那么无疑是很费内存的,也不方便维护,项目小没啥说法,项目大了维护起来简直是辣眼睛。。。

15 回复 有任何疑惑可以回复我~

哈哈,因为o只有两个属性:a和b,没有add方法!

3 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

直接用o.add(5,7)不就好了?为什么要用add.call(o,5,7)??

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信