JS--理解call、apply和bind
call、apply和bind
call,apply是Function原型中的方法,它们的作用一样,区别在于传入参数的方式不同。
call(thisArg, arg1, arg2...)
传入的参数不固定,第一个参数用来指定函数内部this的指向,从第二个参数往后的所有元素参数依次传入被调用的函数
apply(thisArg, argArray)
可以传入两个参数,第一个参数用来指定函数内部this的指向,第二个参数是一个带有下标的集合(Array对象or类数组arguments),
apply把这个集合中的元素依次传递给被调用的函数
bind(thisArg, arg1, arg2...)
传入的参数不固定,第一个参数用来指定函数内部this的指向,从第二个参数往后的所有参数依次传入被调用的函数
创建一个函数实例,this会被绑定到传给bind函数的第一个参数上
call、apply在实际开发中的应用
改变被调用函数内部的this指向
1 document.getElementById('div1').onclick = function () { 2 var func = function () { 3 console.log(this.id); 4 } 5 func(); //undefined 6 func.call(this); //div1 7 }
上述代码第5行,函数func以普通函数调用的方式执行,函数内部的this会指向window
代码第6行用call来修正函数func内部this的指向
实现Function.prototype.bind函数
借用其他对象的方法