在JavaScript中,call、apply和bind是Function对象自带的三个方法,都是为了改变函数体内部 this 的指向。 apply 、 call 、bind 三者第一个参数都是 this 要指向的对象,也就是想指定的上下文;apply 、 call 、bind 三者均可以利用后续参数传参; call和apply的返回值是当即调用的,bind是延迟调用的数组
一、call()例子bash
function f(){
console.log(this)
console.log(arguments)
}
var obj={
f
}
var fn =obj.f
obj.f()//这里的this指向的是obj
fn()//指向的是window
fn.call(context,1,2,3,4,5)
第一个参数是用来改变函数执行时内部this指向的
第二个参数及以后的参数 都是传给fn函数的实参
复制代码
对于 apply、call 两者而言,做用彻底同样,只是接受 参数 的方式不太同样。call 是把参数按顺序传递进去,而 apply 则是把参数放在数组 里。app
二、apply()例子函数
function fn() {
console.log(this);
console.log(arguments);
}
fn.apply(obj,[1,2,3,4,5,6]);
// apply 的第二个参数,是一个 数组或者类数组;
// 传参时, 虽然是以一个总体的形式传给了fn;但 fn接收时
// 仍是分开接收的;
复制代码
bind() 方法会建立一个 新函数,称为绑定函数,当调用这个绑定函数时, 绑定函数会以建立它时传入 bind() 方法的第一个参数 做为 this,传入 bind() 方法的 第二个以及之后的参 数加上绑定函数运行时自己的参数按照顺序做为原函数的参数来调用原函数。ui
三、bind()例子this
// bind 的用法 形式上跟 call 同样
var obj = {name:'zf'};
function fn() {
console.log(this);
console.log(arguments);
}
var res1 = fn.call(obj,1,2,3,4,5,6);
var res2 = fn.bind(obj,1,2,3,4,5,6);
// bind 不会让函数当即执行
// 他的返回值是一个 改变后的函数
复制代码
代码诚难得,搬砖价更高spa
欢迎留言交流code