CALL
call()方法调用一个函数,其具有一个指定的 this值和分别地提供的参数(参数的列表)。
·注意:该方法的作用和 apply()方法类似,只有一个区别,就是 call()方法接受的是若个参数的列表,而apply()方法接受的是一个包含多个参数的数组。
·语法:
fun. call(thisArg, arg1,arg2, arg3,…)
thisArg
在fun函数运行时指定的 this值
如果指定了null或者undefined 则内部 this 指向 window.
arg1, arg2, …
指定的参数列表
// call 方法 // 1.功能:第一个可以指定函数的 this,第二个可以执行函数并传参 // 2.参数:第一个参数,传入一个指定让 this 指向的对象,第二个参数及以后,是函数参数的列表 // 3.返回值:就是函数自己的返回值 // 4.测试 var o = { name: “zs” } // fun.call(o,1,2);APPLY
· apply()方法调用一个函数,第一个参数是一个指定的 this值,第二个参数是以一个数组
(或类似数组的对象)形式提供的参数。
·注意:该方法的作用和 call()方法类似,只有一个区别,就是call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组。
·语法:
fun. apply(thisArg,[argsArray])
// apply 方法 // 1.功能:第一个可以指定函数的 this,第二个可以执行函数并传参 // 2.参数:第一个参数,传入一个指定让 this 指向的对象,第二个参数是函数的参数组成的数组 // 3.返回值:就是函数自己的返回值 // 4.测试 // fun.apply(o,[4,5]);BIND
· bind()函数会创建一个新函数(称为绑定函数),新函数与被调函数(绑定函数的目标函数)具有相同的函数体(在ECMAScript 5规范中内置的call属性)。
·当目标函数被调用时this值绑定到 bind ()的第一个参数,该参数不能被重写。
绑定函数被调用时,bind()也接受预设的参数提供给原函数。
·一个绑定函数也能使用new操作符创建对象:这种行为就像把原函数当成构造器。提供的this值被忽略,同时调用时的参数被提供给模拟函数。
·语法:
fun. bind(thisArg, arg1,arg2, arg3, …)
·参数:
thisArg:当绑定函数被调用时,该参数会作为原函数运行时的 this 指向。当使用new 操作符调用绑定函数时,该参数无效。
arg1,arg2, …当绑定函数被调用时,这些参数将置于实参之前传递给被绑定的方法。
·返回值:
返回由指定的this值和初始化参数改造的原函数拷贝。
// bind 方法 // 1.功能:第一个可以指定函数的 this,bind 方法不能执行函数,但是可以传参 // 2.参数:第一个参数,传入一个指定让 this 指向的对象,第二个参数及以后,是函数参数的列表 // 3.返回值:返回一个新的指定了 this 的函数,也可以叫绑定函数 // 4.测试 var fn = fun.bind(o,2,3); console.log(fn); fn(6,7); </script>总结
call 和apply 特性一样
·都是用来调用函数,而且是立即调用
·但是可以在调用函数的同时,通过第一个参数指定函数内部 this的指向
. call 调用的时候,参数必须以参数列表的形式进行传递,也就是以逗号分隔的方式依次传递即可
apply调用的时候,参数必须是一个数组,然后在执行的时候,会将数组内部的元素一个一个拿出来,与形参一一对应进行传递
·如果第一个参数指定了null或者undefined 则内部 this 指向window
bind
·可以用来指定内部 this 的指向,然后生成一个改变了this 指向的新的函数
·它和call、apply最大的区别是:bind 不会调用
. bind 支持传递参数,它的传参方式比较特殊,一共有两个位置可以传递
1.在bind 的同时,以参数列表的形式进行传递
2.在调用的时候,以参数列表的形式进行传递
·那到底以谁bind 的时候传递的参数为准呢还是以调用的时候传递的参数为准
两者合并: bind的时候传递的参数和调用的时候传递的参数会合并到一起,传递到函数内部