前端技术:call和apply的区别
今天给大家介绍call和apply的区别。先来看一段代码:
运行结果是:
可以看到控制台中什么也没有输出,并不是我们想要的"翠花"。那到底是怎么回事呢?接下来我们在show函数中把this打印出来看看:
可以看到此时函数中的this指向的是window对象,我们再看看window对象的name属性值:
所以我们在控制台中看到的是空。其实我们的本意是输出obj这个对象中的name属性,也就是希望这个show()函数中的this指向obj这个对象。那怎么办呢?此时我们可以使用call或者apply。我们先来看:
使用call:
使用apply:
从上面的代码结果可以得到:apply、call功能是一样的,都是让函数调用,并且设置函数中this代表的对象。那它们有什么区别呢?接下来看看下面的代码:
此时使用
call方式来调用:
apply方式来调用:
总结:
1 call的语法:函数名.call(obj,参数1,参数2,参数3……);
2 apply的语法:函数名.apply(obj,[参数1,参数2,参数3……]);
这两个东西功能相同,就是把一个函数里面的this设置为某个对象,区别就是后面的参数的语法。call需要使用逗号分隔列出所有参数,但是apply是把所有参数写在数组里面。需要注意的是即使只有一个参数,也必须写在数组里面。