直接用o.add(5,7)不就好了?为什么要用add.call(o,5,7)??
如图,都把我看蒙了
如图,都把我看蒙了
2017-02-04
因为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;那么无疑是很费内存的,也不方便维护,项目小没啥说法,项目大了维护起来简直是辣眼睛。。。
举报