JavaScrtipt在动态变换运行时会出现上下文特性, 在运行中,代码老是有一个上下文对象,代码处理在该对象以内. 上下文对象是经过this变量来体现的, 这个this变量永远指向当前代码所处的对象中.而动态改变方法所在的上下文this则须要使用apply和call方法。javascript
首先,这两个方法的做用是同样的,不一样的只是表现方式,即传入参数的形式不一样。java
语法以下:数组
语法:app
foo.call([thisobj,arg1, arg2, arg2),接受多个参数,第一个为执行上下文相关实例化对象(thisobj),第二个参数到最后一个参数做为实际参数一个个传给foo对象,函数
foo.apply(thisobj,[arg1,arg2,arg3]),apply最多接受两个参数,第一个为执行上下文相关实例化对象(thisobj),第二个为参数数组,传递给foo对象。this
实际做用:这两个方法能够用来代替另外一个对象foo调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文(foo)改变为由 thisObj 指定的新对象。因此,整个过程当中,foo只为提供一个方法,这个方法经过call和apply被thisobj调用了。指针
若是没有提供 thisObj 参数,那么 Global 对象被用做thisObj。说明白一点其实就是更改对象的内部指针,即改变对象的this指向的内容。 对象
【补充:javascript里的this指针逻辑上的概念也是实例化对象,而javascript里call和apply操做符能够随意改变this指向】ip