亚太智媒
关闭

亚太智媒APP, 全新登场!

点击下载

前端技术:call和apply的区别

时讯

2019-01-24 09:19

今天给大家介绍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是把所有参数写在数组里面。需要注意的是即使只有一个参数,也必须写在数组里面。