在改变 this 指向的时候,经常会把这三个方法混淆,下面就详细的整理一下三者的用法和区别

call() 方法

  • call() 方法可以有无数个参数
  • 第一个参数是改变 this 指向的对象
  • 后面的参数直接传递给函数的自身
  • 使用后会自动执行
var a = {
name: '张三'
} var b = {
name: '李四',
sayName: function (a,b,c) {
console.log(this.name, a+b+c)
}
} b.sayName.call(a, 1,2,3)
// 输出 --> 张三 6

apply() 方法

  • apply() 方法只能由两个参数
  • 第一个参数是改变 this 指向的对象
  • 第二个参数必须是一个数组
  • 使用后会自动执行
var a = {
name: '张三'
} var b = {
name: '李四',
sayName: function (a,b,c) {
console.log(this.name, a+b+c)
}
} var arr = [1,2,3] b.sayName.apply(a,arr)
// 输出 --> 张三 6

bind() 方法

  • bind() 方法可以有无数个参数
  • 第一个参数是改变 this 指向的对象
  • 后面的参数直接传递给函数的自身
  • 使用后不会自动执行,会返回一个新函数
var a = {
name: '张三'
} var b = {
name: '李四',
sayName: function (a,b,c) {
console.log(this.name, a+b+c)
}
} var c = b.sayName.bind(a,1,2,3)
// 需手动调用新函数 c 才会执行
c()
// 输出 --> 张三 6

三个方法的共同点

  • 第一个参数都为改变this指向的对象
  • 在非严格模式下,若第一参数为null/undefined,this默认指向window
  • 在严格模式下,若第一参数为null/undefined,this默认指向undefined

三个方法的区别

这里用一个表格来展示吧,可能看起来要稍微直观点

方法名 可含参数个数 是否自动执行
call 无数个
appy 两个,第二个必须为数组
bind 无数个 否,会返回一个新函数

call、apply和bind的用法的更多相关文章

  1. js中call、apply、bind的用法

    原文链接:http://www.cnblogs.com/xljzlw/p/3775162.html var zlw = { name: "zlw", sayHello: funct ...

  2. call、apply、bind的用法

    数组追加 //用apply拼接 var arr1=[12,'name:foo',2048]; var arr2=['Joe','Hello']; Array.prototype.push.apply( ...

  3. javascript中call()、apply()、bind()的用法理解

    一.bind的用法 第一个:obj.showInfo('arg','arg_18');中传的2个参数通过showInfo方法改变的是obj下中的name和age 第二个:obj.showInfo.bi ...

  4. JS中的call()、apply() 以及 bind()方法用法总结

    JS中的call()方法和apply()方法用法总结  : 讲解: 调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域. function add(c,d){ return thi ...

  5. javascript中call()、apply()、bind()的用法终于理解

    其实是一个很简单的东西,认真看十分钟就从一脸懵B 到完全 理解! 先看明白下面: 例1 obj.objAge;  //17 obj.myFun()  //小张年龄undefined 例2 shows( ...

  6. call,apply,bind的用法与区别

    1.call/apply/bind方法的来源 首先,在使用call,apply,bind方法时,我们有必要知道这三个方法究竟是来自哪里?为什么可以使用的到这三个方法? call,apply,bind这 ...

  7. (转)javascript中call()、apply()、bind()的用法

    其实是一个很简单的东西,认真看十分钟就从一脸懵B 到完全 理解! 先看明白下面: 例1 obj.objAge;  //17 obj.myFun()  //小张年龄undefined 例2 shows( ...

  8. <JavaScript> call()、apply()、bind() 的用法

    其实是一个很简单的东西,认真看十分钟就从一脸懵B 到完全 理解! 先看明白下面: 例 1 obj.objAge; obj.myFun() // 小张年龄 undefined   例 2 shows() ...

  9. call、apply、bind 的用法

    例1 obj.objAge; //17 obj.myFun() //小张年龄undefined 例2 shows() //盲僧 比较一下这两者this 的差别,第一个打印里面的this 指向obj,第 ...

  10. JS中call()、apply()、bind()的用法

    其实是一个很简单的东西,认真看十分钟就从一脸懵B 到完全 理解! 先看明白下面: 例1 obj.objAge;  //17 obj.myFun()  //小张年龄undefined 例2 shows( ...

随机推荐

  1. windows使用bat文件定时备份文件

    遇到一个需求,需要备份Access数据库,Access生成的数据都保存在xx.mdb文件中,所以考虑使用windows任务 定时执行一个备份文件的bat文件来解决这个问题. backup.bat文件代 ...

  2. 【数据库】5.0 MySQL入门学习(五)——MySQL源码了解及MySQL初始化设置

    1.0 MySQL源码目录主要包括:客户端代码.服务端代码.测试工具.其他库文件.当然,看懂源代码得有一定的C语言基础. BUILD:各种平台的编译脚本,可以用来制作各平台的二进制版本 client: ...

  3. Tesorflow源代码安装方式以及错误的解决方法

    作者 修雨轩陈@cnblog 目录 Configure the installation. (安装配置) Create the pip package and install (创建pip安装包并且安 ...

  4. ArcGIS Enterprise 10.5.1 静默安装部署记录(Centos 7.2 minimal)- 3、安装Portal for ArcGIS

    安装Portal for ArcGIS 解压portal安装包,tar -xzvf Portal_for_ArcGIS_Linux_1051_156440.tar.gz 切换到arcgis账户静默安装 ...

  5. asyncio标准库1 Hello World

    利用asyncio的event loop,编写和调度协程 coroutine [,kəuru:'ti:n] n. 协程 Simple coroutine(调用1个协程) import asyncio ...

  6. mongodb 3.4 学习 (四)分片

    https://www.linode.com/docs/databases/mongodb/build-database-clusters-with-mongodb 由三部分组成 shard: 每个s ...

  7. Flask入门 flask结构 url_for 重定向(一)

    Flask入门(一) 1 安装虚拟环境Mac,linux sudo pip install virtualenv ​ ubuntu系统 sudo apt-get install python-virt ...

  8. centos6.5升级python2.7

    请看我的有道云笔记链接: http://note.youdao.com/noteshare?id=777179c98876147537288489e963b7db&sub=71D56E2269 ...

  9. Android NDK r8 Cygwin CDT 在window下开发环境搭建 安装配置与使用 具体图文解说

    版权声明:本博客全部文章均为原创.欢迎交流.欢迎转载:转载请勿篡改内容,而且注明出处,谢谢! https://blog.csdn.net/waldmer/article/details/3272500 ...

  10. 【LOJ6052】「雅礼集训 2017 Day11」DIV(杜教筛)

    点此看题面 大致题意: 求\(1\sim n\)内所有满足\(a>0\)的约数\(a+bi\)的\(a\)之和. 解题思路 首先,我们设\(x=(a+bi)(c+di)(1\le x\le n) ...