call 和 apply
call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。因为 JavaScript 的函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念。
改变函数体内部 this 的指向
//call用法
function changeStyle(attr, value){
this.style[attr] = value;
}
var box = document.getElementById('box');
window.changeStyle.call(box, "height", "200px");
//apply用法
window.changeStyle.apply(box, ['height', '200px']);
获取数组中的最大值和最小值
var maxNum = Math.max("5, 458 , 120 , -215")//458
//number 本身没有 max 方法,但是 Math 有
var numbers = [5, 458 , 120 , -215 ];
var maxNum = Math.max.call(Math,5, 458 , 120 , -215); //458,用call没什么意义因为参数不是数组可以直接用Math.max
//获取数组中的最大值和最小值
var maxNum = Math.max.apply(Math, numbers), //458
bind()改变上下文环境之后是回调执行 apply & call 则会立即执行函数
var obj = {
x: 81,
};
var foo = {
getX: function() {
return this.x;
}
}
console.log(foo.getX.bind(obj)()); //81
console.log(foo.getX.call(obj)); //81
console.log(foo.getX.apply(obj)); //81
2017/2/28