其实是一个很简单的东西,认真看十分钟就从一脸懵B 到完全 理解!

先看明白下面:

例 1

obj.objAge;  // 17obj.myFun()  // 小张年龄 undefined

例 2

shows()  // 盲僧 

比较一下这两者 this 的差别,第一个打印里面的 this 指向 obj,第二个全局声明的 shows() 函数 this 是 window ;

1,call()、apply()、bind() 都是用来重定义 this 这个对象的!

如:

obj.myFun.call(db);    // 德玛年龄 99obj.myFun.apply(db);    // 德玛年龄 99obj.myFun.bind(db)();   // 德玛年龄 99

以上出了 bind 方法后面多了个 () 外 ,结果返回都一致!

由此得出结论,bind 返回的是一个新的函数,你必须调用它才会被执行。

2,对比call 、bind 、 apply 传参情况下

 

obj.myFun.call(db,'成都','上海');     // 德玛 年龄 99  来自 成都去往上海obj.myFun.apply(db,['成都','上海']);      // 德玛 年龄 99  来自 成都去往上海obj.myFun.bind(db,'成都','上海')();       // 德玛 年龄 99  来自 成都去往上海obj.myFun.bind(db,['成都','上海'])();   // 德玛 年龄 99  来自 成都, 上海去往 undefined

  

微妙的差距!

从上面四个结果不难看出:

call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了:

call 的参数是直接放进去的,第二第三第 n 个参数全都用逗号分隔,直接放到后面 obj.myFun.call(db,'成都', ... ,'string' )。

apply 的所有参数都必须放在一个数组里面传进去 obj.myFun.apply(db,['成都', ..., 'string' ])。

bind 除了返回是函数以外,它 的参数和 call 一样。

当然,三者的参数不限定是 string 类型,允许是各种类型,包括函数 、 object 等等!

JS 中 call()、apply()、bind() 的用法相关推荐

  1. 复习javascript中call,apply,bind的用法

    一直很难理解js中的call apply bind,在w3schools,mdn阅读了,也看了很多相关的文章,今天我来写下我理解的call apply bind 首先创建一个函数 function m ...

  2. js中继承的几种用法总结(apply,call,prototype)

    本篇文章主要介绍了js中继承的几种用法总结(apply,call,prototype) 需要的朋友可以过来参考下,希望对大家有所帮助 一,js中对象继承 js中有三种继承方式 1.js原型(proto ...

  3. 第22篇 js中的this指针的用法

    前面把js的相关知识总结了下,今天把js中的上下文的this,对于强类型语言,this的用法非常的单一,因为他们没有js特有的动态绑定. 首先看下面代码: function funcA() {this ...

  4. js中!和!!的区别及用法

    js中!和!!的区别及用法 js中!的用法是比较灵活的,它除了做逻辑运算常常会用!做类型判断,可以用!与上对象来求得一个布尔值, 1.!可将变量转换成boolean类型,null.undefined和 ...

  5. call() , apply() ,bind()的用法

    call() , apply() ,bind()的用法 - 作用:改变this指向,可以传递参数 - 语法: A.call(B, 参数1, 参数2)A.apply(B, [ 参数1, 参数2])A.b ...

  6. js中try和catch的用法

    js中try和catch的用法 版权声明:本文为@lyhh5原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明 原文链接:https://blog.csdn.net/l ...

  7. JS中break和continue的用法

    break和continue的用法 Break--跳出循环.判断,用于判断或循环语句中 Continue--跳出本次循环,只能用于循环语句中. 区分是否为自定义标识符,其后加冒号,为自定义标识符. B ...

  8. call(),apply(),bind()的用法及举例

    通过学习call(),apply(),bind()的用法和区别,我们能更好的理解this及作用域的含义,为后面的编程打下基础. call()的用法: 调用一个函数,使其具有一个指定的this值和分别地 ...

  9. js中自己实现bind函数的方式

    前言 最近由于工作比较忙,好久都没时间静下心来研究一些东西了.今天在研究 call 和 apply 的区别的时候,看到 github 上面的一篇文章,看完以后,感觉启发很大. 文章链接为 https: ...

  10. JavaScript中call,apply,bind方法的总结。

    why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = {user:"追梦子",fn:fun ...

最新文章

  1. Arrays.sort和Collection.sort分别使用什么排序来实现的
  2. mysql 占比函数_MySQL中你必须了解的函数
  3. Linux定时运行程序脚本
  4. 使用Spring将POJO公开为JMX MBean
  5. 【OpenCV 例程200篇】23. 图像添加中文文字
  6. (王道408考研数据结构)第八章排序-第四节1:冒泡排序
  7. SharePoint 2013 How to Backup Site Collection Automatically With a PowerShell Script
  8. 三星上线售价99万8K电视 网友:是不是多打了一位数
  9. gitlab php自动化测试,自动化发布-GitLab WEB Hooks 配置
  10. 为开发用途mac电脑瘦身
  11. kafka php 教程,php 使用kafka
  12. 纸鸢|物联网云平台小工具集合常见 MQTT 客户端比较
  13. 菜鸟教程python3 mysql_MySQL菜鸟教程
  14. ireport 5.6.0 添加 Conditional Style 动态加粗字体
  15. OpenGL 入门 17:立方体贴图
  16. nfs linux 权限不够,nfs Permission denied 的一种情况
  17. 排球比赛计分程序的典型用户和场景
  18. 【职业女性着装全攻略】_职业女性应该怎样着装
  19. 在技术面前,请保持一颗谦卑的心
  20. 3dmax和python哪个好学_C4D和3DMAX哪个好?

热门文章

  1. [MySQL FAQ]系列 -- 快速还原MyISAM表索引
  2. create_metrology_model创建测量几何形状所需的数据结构(原理)
  3. 无人驾驶汽车之争本田为何未战先败
  4. 【pyqt5】——入门级模板(ui文件+ui转py文件+逻辑py文件)(消息提示框)
  5. 包含min函数的栈 python_面试题_设计包含 min函数的栈
  6. closewait一直不释放_机床为什么要释放应力?怎么释放应力才好?
  7. 二分法求方程的根_快速求解方程的根——二分法与牛顿迭代法
  8. A Web Module That Uses JavaServer Faces Technology: The hello2 Example
  9. (转)PowerHA完全手册(一,二,三)
  10. 配置 tsconfig.json