美文网首页
箭头函数和call、apply

箭头函数和call、apply

作者: zxqian1991 | 来源:发表于2017-06-05 15:05 被阅读387次

在使用js的时候,很多时候,直接使用某个函数,会发现由于没有调用该函数的对象,函数内部的this指针会指向全局的空间。

解决的方法

一般出现这种需要调用对象的情况,我们往往需要手动的指定调用对象,主要有以下三种方式:

  1. 使用apply
  2. 使用call
  3. 使用bind

其中,apply,call的的区别主要在于函数参数的差别,apply是以数组作为参数传递,call则是一个个的传递。

bind的作用是在于手动的指定函数的对象,并重新生成一个新的函数。

举个例子

let obj = {
  name: "qianzhixiang",
  func: function(a,b){
      console.log(this.name,a,b);
  }
};
obj.func(1,2); // qianzhixiang 1 2
let func = obj.func;
func(1,2); //   1 2
let func_ = func.bind(obj);
func_(1,2);// qianzhixiang 1 2
func(1,2);//   1 2
func.call(obj,1,2);// qianzhixiang 1 2
func.apply(obj,[1,2]);// qianzhixiang 1 2

如上述例子,基本可以说明几者不同的区别。

箭头函数

上面似乎没有什么问题,也很完美,可是,在箭头函数中却存在问题,因为箭头函数中的,applycall方法指向的对象会被默认忽略。

还是那个例子

let obj = {
  name: "qianzhixiang",
  func: (a,b) => {
      console.log(this.name,a,b);
  }
};
obj.func(1,2); // 1 2
let func = obj.func;
func(1,2); //   1 2
let func_ = func.bind(obj);
func_(1,2);//  1 2
func(1,2);//   1 2
func.call(obj,1,2);// 1 2
func.apply(obj,[1,2]);//  1 2

可以看到,无论是哪种方式,都会忽略对应的this.使用时请慎重。

相关文章

  • this指向问题

    对比call 、bind 、 apply(对箭头函数无效)

  • 箭头函数和call、apply

    在使用js的时候,很多时候,直接使用某个函数,会发现由于没有调用该函数的对象,函数内部的this指针会指向全局的空...

  • 改变This的指向有哪些

    bind、call、apply、箭头函数、new的区别 call和apply其实是一样的,区别就在于传参时参数是一...

  • 未整理

    call() 和 apply() 用来调用函数 call(函数名,参数值)apply(函数名,参数值)

  • 箭头函数

    箭头函数么有this arguments如何更改this指向1)call apply bind2)var that...

  • this 指向汇总及 call 、apply、 bind 、箭头

    this的指向汇总: call 、apply 、bind 使用分析 箭头函数this是指向父级作用域

  • this深入理解

    js中this指向有几种情况 全局环境 函数调用 构造调用 apply、call、bind绑定 箭头函数 全局环境...

  • this

    call、apply、函数执行的本质 bind 箭头函数 结束语 如果喜欢本文,记得点赞并加关注哟。

  • js this相关问题总结

    应用场景 作为普通函数 使用call,apply,bind 作为对象方法被调用 在class方法中被调用 箭头函数...

  • 箭头函数与普通函数区别

    箭头函数区别总结: this永远指向上下文,call,apply,bind无法改变。 不能作为构造函数,使用new...

网友评论

      本文标题:箭头函数和call、apply

      本文链接:https://www.haomeiwen.com/subject/txiifxtx.html