js的apply和call

this:this指向的永远是调用该方法的对象

call和apply却可以改变this的指向,比如我们现在新建一个空对象Dog

然后用dog去调用Person的say方法

从下面的图可以看出来,Dog执行了say方法,并且他打印出来的this对象是Dog自己

call()

function.call(obj,arg1,arg2,arg3)

1.调用call的对象必须是个函数function

2.call的第一个参数将会是function改变上下文后指向的对象。如果不传,将会默认是全局对象window

第二个参数开始可以接收任意个参数,这些参数将会作为function的参数传入function

apply()

function.apply(obj[,argArray])

与call方法的使用基本一致,但是只接收两个参数,其中第二个参数必须是一个数组或者类数组,这也是这两个方法很重要的一个区别

*apply的一个巧妙的用处,可以将一个数组默认的转换为一个参数列表[param1,param2,param3] 转换为 param1,param2,param3)


传递null对象的时候和传window是一样的

*js伪数组的一些理解

apply中的arguments是一个为数组,什么是伪数组?就是有数组的一些类似属性,但是他确是一个对象,如下图可以看到

所以,如果这个伪数组用不了数组的一些方法,就可以通过Array.prototype.xxxfunction.apply(obj,一个伪数组)

你可能感兴趣的:(js的apply和call)