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