apply、call、bind 都是可以改变 this 的指向的,但是这三个函数稍有不同
1.fun.call(thisArg[, arg1[, arg2[, ...]]])
2.fun.apply(thisArg, [argsArray])
call 与 apply是相似的,只是调用方法不同,apply只能接收两个对象:一个新的this对象和一个参数数组。call 则可以接收一个this对象和多个参数 例子:
function add(a, b){
return a + b;
}
function sub(a, b){
return a - b;
}
// apply() 的用法
var a1 = add.apply(sub, [4, 2]); // sub 调用 add 的方法
var a2 = sub.apply(add, [4, 2]);
a1; // 6 将sub的指针指向了add,所以最后执行的是add
a2; // 2
// call() 的用法
var a1 = add.call(sub, 4, 2);
他们与bind 的区别是,这两个方法会立即调用,bind()不会立即调用,需要手动去调用。例子:
window.onload = function() {
var fn = {
num: 2,
fun: function() {
document.getElementById("box").onclick = (function() {
console.log(this.num);
}).bind(this);
// }).call(this);
// }).apply(this);
}
/*
* 这里的 this 是 fun,所以可以正确地访问 num,
* 如果使用 bind(),会在点击之后打印 2;
* 如果使用 call() 或者 apply(),那么在刷新网页的时候就会打印 2
*/
}
fn.fun();
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。