快捷搜索: 王者荣耀 脱发

浅谈js中call,apply,bind的区别

Call、 apply 区别,原生实现 bind Call、apply、bind都是改变this指向的,其中call的话是通过第一个参数来 改变this指向,函数在传参的时候一个一个进行传参,apply也是通过第一个参 数改变this指向,函数传参的时候通过数组或是一组的形式进行传参,而且他 只能用于函数的调用时候,而bind呢不能用于函数的标准调用传参,只能是事 件或是方法的后边进行改变this的指向 他们都是用来改变this指向的。

call:改变this指向 函数被执行了 call(上下文环境,参数) 上下文环境:就是我们想到call的对象 第二个是用来传参数 的 我们同事也要在上面的函数上面来接收 然后返回的就是 我们传递过去的参数。

var msg="今天吃了个鸡腿";
var obj={
          
   
  msg:"今天有点儿不开心"

}
function getData(data){
          
   
//在这里 我们接收传递过来的参数后 赋值给msg返回回来的时候  也是可以的 
  this.msg=data;
    return this.msg
    
  }
 //如果我们不用call的话 他就会默认找到window 
 //第一个是我们要改变的对象,第二个是我么要传递的参数
var data=getData.call(obj,"哈哈");

console.log(data);//结果返回的是“哈哈”
// 全局调用的话我们的this指向等于window
// 我们如何能让我们this指向当前这个函数
// 我们需要用到call  想上面这样 可以改变this指向

apply :

和call相似度很高!!! 有一点注意的是 我们要用数组来进行传参

var msg="今天吃了个鸡腿";
var obj={
          
   
  msg:"今天有点儿不开心"

}
function getData(data){
          
   
  this.msg=data;
    return this.msg
    
  }
 
var data=getData.apply(obj,["哈哈"]);
console.log(data);

// 我们在使用apply时候报错了 

//  告诉我们要创建一个类数组,只需要给我们传递过去的数据 用数组括起来皆可以啦

特点也同上!!改变了this指向 也能函数 执行

bind :

能改变this指向但是:

bind时候 后台给我们返回了一个函数,但是这个函数并未执行

ƒ getData(data){
          
   
  this.msg=data;
    return this.msg
    
  }

在reach中我们通常用bind来改变 this指向。 如何让函数被执行 只需要在后面加一个小括号 要用两个小括号 来 调用

var msg="今天吃了个鸡腿";
var obj={
          
   
  msg:"今天有点儿不开心"
}
function getData(data){
          
   
  this.msg=data;
    return this.msg    
  }
 //在这里面我们 用一个小括号 来实现函数的执行
 //这一 bind也不能用数组传参 是 逗号的方式传参
var data=getData.bind(obj,"哈哈")();
console.log(data);
经验分享 程序员 微信小程序 职场和发展