JS 中 call()、apply()、bind() 的用法
其实是一个很简单的东西,认真看十分钟就从一脸懵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() 的用法相关推荐
- 复习javascript中call,apply,bind的用法
一直很难理解js中的call apply bind,在w3schools,mdn阅读了,也看了很多相关的文章,今天我来写下我理解的call apply bind 首先创建一个函数 function m ...
- js中继承的几种用法总结(apply,call,prototype)
本篇文章主要介绍了js中继承的几种用法总结(apply,call,prototype) 需要的朋友可以过来参考下,希望对大家有所帮助 一,js中对象继承 js中有三种继承方式 1.js原型(proto ...
- 第22篇 js中的this指针的用法
前面把js的相关知识总结了下,今天把js中的上下文的this,对于强类型语言,this的用法非常的单一,因为他们没有js特有的动态绑定. 首先看下面代码: function funcA() {this ...
- js中!和!!的区别及用法
js中!和!!的区别及用法 js中!的用法是比较灵活的,它除了做逻辑运算常常会用!做类型判断,可以用!与上对象来求得一个布尔值, 1.!可将变量转换成boolean类型,null.undefined和 ...
- call() , apply() ,bind()的用法
call() , apply() ,bind()的用法 - 作用:改变this指向,可以传递参数 - 语法: A.call(B, 参数1, 参数2)A.apply(B, [ 参数1, 参数2])A.b ...
- js中try和catch的用法
js中try和catch的用法 版权声明:本文为@lyhh5原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明 原文链接:https://blog.csdn.net/l ...
- JS中break和continue的用法
break和continue的用法 Break--跳出循环.判断,用于判断或循环语句中 Continue--跳出本次循环,只能用于循环语句中. 区分是否为自定义标识符,其后加冒号,为自定义标识符. B ...
- call(),apply(),bind()的用法及举例
通过学习call(),apply(),bind()的用法和区别,我们能更好的理解this及作用域的含义,为后面的编程打下基础. call()的用法: 调用一个函数,使其具有一个指定的this值和分别地 ...
- js中自己实现bind函数的方式
前言 最近由于工作比较忙,好久都没时间静下心来研究一些东西了.今天在研究 call 和 apply 的区别的时候,看到 github 上面的一篇文章,看完以后,感觉启发很大. 文章链接为 https: ...
- JavaScript中call,apply,bind方法的总结。
why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = {user:"追梦子",fn:fun ...
最新文章
- Arrays.sort和Collection.sort分别使用什么排序来实现的
- mysql 占比函数_MySQL中你必须了解的函数
- Linux定时运行程序脚本
- 使用Spring将POJO公开为JMX MBean
- 【OpenCV 例程200篇】23. 图像添加中文文字
- (王道408考研数据结构)第八章排序-第四节1:冒泡排序
- SharePoint 2013 How to Backup Site Collection Automatically With a PowerShell Script
- 三星上线售价99万8K电视 网友:是不是多打了一位数
- gitlab php自动化测试,自动化发布-GitLab WEB Hooks 配置
- 为开发用途mac电脑瘦身
- kafka php 教程,php 使用kafka
- 纸鸢|物联网云平台小工具集合常见 MQTT 客户端比较
- 菜鸟教程python3 mysql_MySQL菜鸟教程
- ireport 5.6.0 添加 Conditional Style 动态加粗字体
- OpenGL 入门 17:立方体贴图
- nfs linux 权限不够,nfs Permission denied 的一种情况
- 排球比赛计分程序的典型用户和场景
- 【职业女性着装全攻略】_职业女性应该怎样着装
- 在技术面前,请保持一颗谦卑的心
- 3dmax和python哪个好学_C4D和3DMAX哪个好?
热门文章
- [MySQL FAQ]系列 -- 快速还原MyISAM表索引
- create_metrology_model创建测量几何形状所需的数据结构(原理)
- 无人驾驶汽车之争本田为何未战先败
- 【pyqt5】——入门级模板(ui文件+ui转py文件+逻辑py文件)(消息提示框)
- 包含min函数的栈 python_面试题_设计包含 min函数的栈
- closewait一直不释放_机床为什么要释放应力?怎么释放应力才好?
- 二分法求方程的根_快速求解方程的根——二分法与牛顿迭代法
- A Web Module That Uses JavaServer Faces Technology: The hello2 Example
- (转)PowerHA完全手册(一,二,三)
- 配置 tsconfig.json