哈?还不知道这几串代码的用法?别睡了起来搬砖了!

340 阅读2分钟

前言

在JavaScript中,call、apply和bind是Function对象自带的三个方法,都是为了改变函数体内部 this 的指向。 apply 、 call 、bind 三者第一个参数都是 this 要指向的对象,也就是想指定的上下文;apply 、 call 、bind 三者都可以利用后续参数传参; call和apply的返回值是立即调用的,bind是延迟调用的

1、call()例子

 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 则是把参数放在数组 里。

2、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() 方法的 第二个以及以后的参 数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。

3、bind()例子

// 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 不会让函数立即执行
// 他的返回值是一个 改变后的函数

代码诚可贵,搬砖价更高

欢迎留言交流