JS高级-apply、call、bind

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,…) 返回的是复制之后的这个方法

你可能感兴趣的:(JS高级-apply、call、bind)