apply和call
作用:改变this的指向
使用方法:
Function.prototype.apply = function (thisArg,Array){}
thisArg表示调用方法的对象,Array表示调用方法所需要的参数数组
函数名字.apply(对象,[参数1,参数2,…])
方法名字.apply(对象,[参数1,参数2,…])
Function.prototype.call = function (thisArg,canshu1,canshu2,…){}
thisArg表示调用方法的对象,后面直接把参数列在后面
函数名字.call(对象,参数1,参数2,…)
方法名字.call(对象,参数1,参数2,…)
不同的地方:参数传递的方式是不一样的
何时使用:
只要是想使用别的对象的方法,并且希望这个方法是当前对象的,那么就可以使用apply或者是call来改变this的指向。
apply和call到底是谁的?
f1.proto === Function.prototype 也就是说所有的函数都是Function的实例对象
apply和call方法实际上并不在函数这个实例对象中,而是在Function的prototype中。
bind
Function.prototype.bind = function (thisArg,arg1,arg2,…){}
function f1(x,y) {
console.log(x+y)
}
var ff = f1.bind(null);
ff(10,20);
复制了一份函数f1给了ff,并在调用ff的时候将参数传了进去,null就是this,默认就是window
bind方法是复制的意思,参数可以在复制的时候就传进去,也可以在复制之后在调用的时候传进去。apply和call是在调用的时候改变this指向,bind方法时在复制的时候改变了this的指向,
使用方法:
函数名字.bind(对象,参数1,参数2,…) 返回的是复制之后的这个函数
方法名字.bind(对象,参数1,参数2,…) 返回的是复制之后的这个方法