首先,先说下this指向:

this指向:谁调用,指向谁(这是错误的!!!

this永远指向最后一个调用它的那个对象

解决this指向问题? 

  1. 使用ES6中箭头函数

  2. 函数内部使用_this = this

  3. 使用apply,call,bind方法

  4. new实例化一个对象

 call、aplay 和 bind 区别

  • apply和call基本类似,他们的区别只是传入的参数不同。
  • apply传入的参数是包含多个参数的数组
  • call传入的参数是若干个参数列表
  • bind方法会创建一个新的函数,当被调用的时候,将其this关键字设置为提供的值,我们必须手动去调用

 apply:

  1. apply() 方法调用一个函数,其具有一个指定的this值,以及作为一个数组(或者类似数组的对象)提供的参数,fun.apply(thisArg, [argsArray])
  2. thisArg:在fun函数运行时指定的this值。指定this的值并不一定是函数执行时真正的this值,如果是原始值的this会指向该原始值的自动包装对象。
  3. argsArray:一个数组或者类数组对象,其中的数组元素将作为单独的参数传给fun函数。参数为null或者undefined,则表示不需要传入任何参数。
let obj = {name : "小王",func1: function () {console.log(this.name)},func2: function () {setTimeout(  function () {this.func1()}.apply(name),1000);}
};obj.func2(); // 小王

 call:

  1. call() 调用一个函数,其具有一个指定的this值,以及若干个参数列表,fun.call(thisArg, arg1, arg2, …)
  2. thisArg:在fun函数运行时指定的this值。指定this的值并不一定是函数执行时真正的this值,如果是原始值的this会指向该原始值的自动包装对象。
  3. arg1, arg2, …:若干个参数列表
let obj2 = {name : "小李",func1: function () {console.log(this.name);},func2: function () {setTimeout(  function () {this.func1()}.call(name),1000);}
};obj2.func2(); // 小李

bind:

  1. bind() 创建一个新的函数,当被调用时,将其this的关键字设置为提供的值,在调用新函数时,在任何提供一个给定的参数序列。

  2. bind创建了一个新函数,必须手动去调用

let obj3 = {name : "小张",func1: function () {console.log(this.name);},func2: function () {setTimeout(  function () {this.func1();}.bind(name)(),1000);}
};obj3.func2();   // 小张

到此,

结束~~~

call、aplay 和 bind 三者之间的区别?相关推荐

  1. TCP三次握手、四次挥手、socket,tcp,http三者之间的区别和原理

    接着上一篇文章叙述: TCP/IP连接(在互联网的通信中,永远是客户端主动连接到服务端): 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协 ...

  2. [转]ExtJs基础--Html DOM、Ext Element及Component三者之间的区别

    要学习及应用好Ext框架,必须需要理解Html DOM.Ext Element及Component三者之间的区别. 每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都有相应的DOM ...

  3. String String.valueof() toString三者之间的区别~

    String  String.valueof()  toString三者之间的区别~ (String )强制类型转换,使用这种方法时,需要注意的是类型必须能转成String类型.因此最好用instan ...

  4. String StringBuilder StringBuffer三者之间的区别~~~

    String StringBuilder  StringBuffer三者之间的区别~~~ String是字符串常量,它是典型的immutable类,被声明final class,所有的属性都是fina ...

  5. JavaScript的call,apply和bind方法之间的区别

    by Rajat Saxena 通过拉贾特·萨克森纳(Rajat Saxena) JavaScript的call,apply和bind方法之间的区别 (The difference between J ...

  6. Python id(obj), ==, is 三者之间的区别

    不多说,直接上代码,看看三者的区别吧. 代码: # 例子 a = [1, 2, 3] b=a; print(a) print(b) print(a is b) print(b is a) print( ...

  7. .NET、C#和ASP.NET三者之间的区别与联系

    .NET.C#和ASP.NET三者之间的区别与联系 1..net(dot net) .net是一个平台,抽象的平台概念. 实现形式是库:①定义了基本的类型(通用类型系统CTS,common type ...

  8. 【待续】C#.Net 关键词清理 Fields Property Attribute Const三者之间的区别与联系

    C#.Net 关键词清理 Fields Property Attribute 三者之间的区别与联系 不少人一直对这三个词容易混淆视听,不知道他们之间到底什么联系. 这可能跟翻译的中文有很大的关系. 首 ...

  9. keydown,keypress,keyup三者之间的区别:

    最近看了Javascript高级教程中对过滤输入的介绍,想实现比如电话号码中不能包好非数值的字符,而相应文本中插入字符的操作是keypress事件,所以就想通过阻止这个事件的默认事件行为来阻止这个事件 ...

  10. 光端机、光纤收发器与光猫三者之间的区别介绍

    现如今,在当下的网络通信项目中,光端机.光纤收发器.光猫这几款产品可以说是应用非常广泛,也是备受安防人的推崇,那么,对于这三者之间的区别你是否清楚呢?接下来就由飞畅科技的小编来为大家详细介绍下光端机. ...

最新文章

  1. centos 安装 svn
  2. commons-lang3-3.2.jar中的常用工具类的使用
  3. Linux内核之时间系统
  4. linux dump用法,Linux命令之tcpdump命令用法介绍
  5. 芯片巨头为何痴恋开源软件?英特尔Imad Sousou来解密
  6. linux内核定义,Linux内核定义的常量
  7. [BUUCTF-pwn]——[ZJCTF 2019]Login
  8. vue-axios interceptors
  9. 元素凸起效果_被誉为作物“生殖元素”的“硼”到底有多重要?看完你就明白了...
  10. 基于Django的博客系统
  11. 华为acl怎么生效_华为ACL配置教程
  12. LOW_VALUE、HIGH_VALUE、ENDPOINT_VALUE转换--UTL_RAW、DBMS_STATS.CONVERT_RAW_VALUE
  13. 对GCN,Transformer, XLNet, ALBERT, CRF等技术仍然一知半解?再不学习就OUT了!
  14. 深度学习笔记_术语/缩写/基本概念
  15. 【平面设计】ACDSee 10.0 软件安装教程
  16. .frx文件扩展的细节-文件扩展名 数据库
  17. 操作系统的作用及基本特性
  18. GEE系列:第 1 单元 Google 地球引擎简介
  19. 功能安全-三种确认措施报告之安全评估报告学习记录
  20. android 播放网络Flash视频 ,需要手机已安装Adobe Flash插件

热门文章

  1. word没有显示endnote_word 未显示EndNote工具条的解决方法
  2. 大华NVR WEB界面把玩
  3. 深度学习需要计算机配置,深度学习工作站配置推荐
  4. presscad图层LIsp_为什么我用统赢软件在CAD里面转完程式后老是出现CAD没有响应的情况?...
  5. 逻辑回归算法原理MATLAB,逻辑回归算法(MATLAB)
  6. python3 爬虫 urlretrieve
  7. MongoDB 数据库导出数据
  8. 微信小程序阻止默认冒泡事件
  9. 2022年N1叉车司机考试题及N1叉车司机理论考试
  10. vs2019安装和使用教程(详细)