call和apply
call和apply
通过call和apply可以重新定义函数的执行环境,即this的指向,这对于一些应用当中是十分常用的。
call()方法示例:
function changeStyle(type, value) {
this.style[type] = value;
}
var obj = document.getElementById('div1');
changeStyle.call(obj, 'fontSize', '20px');
changeStyle('fontSize', '30px'); //出错,此时changeStyle中this引用的是window对象
this.style[type] = value;
}
var obj = document.getElementById('div1');
changeStyle.call(obj, 'fontSize', '20px');
changeStyle('fontSize', '30px'); //出错,此时changeStyle中this引用的是window对象
注意changeStyle.call()方法有三个参数。
第一个参数用于指定该函数将被哪个对象所调用。这里指定了obj,也就意味着,changeStyle函数将被obj调用,因此函数体内this指向是obj对象。而第二个和第三个参数对应的是changeStyle函数里的type和value两个形参。最终我们看到的效果是Dom元素obj的字体变成了20px。
apply()方法示例:
var obj = document.getElementById('div1');
changeStyle.apply(obj, ['fontSize', '20px']);
changeStyle('fontSize', '30px'); //出错,此时changeStyle中this引用的是window对象
changeStyle.apply(obj, ['fontSize', '20px']);
changeStyle('fontSize', '30px'); //出错,此时changeStyle中this引用的是window对象
apply的用法和call大致相同,只有一点区别,apply只接受两个参数,第一个参数和call相同,第二个参数必须是一个数组,数组中的元素对应的就是函数的形参。