call、apply、bind方法的实现
先分析下3个方法的作用
改变this的指向。
传入参数。
call apply返回函数结果, bind 返回新函数
一、call方法的实现
改变this指向
首先我们知道,对象上的方法,在调用时,this是指向对象的。
知道了这一点我们就可以实现改变this的指向
测试
现在,改变this的值,实现了
最简单实现es6
二、apply方法的实现
其实apply和call差不多,没什么大区别
利用已经写好的myCall来实现
不用myCall
测试
效果没区别
三、bind方法的实现(利用call方法实现)
首先我们可以通过给目标函数指定作用域来简单实现bind()方法:
考虑到函数柯里化的情况,我们可以构建一个更加健壮的bind():
这次的bind()方法可以绑定对象,也支持在绑定的时候传参。
继续,Javascript的函数还可以作为构造函数,那么绑定后的函数用这种方式调用时,情况就比较微妙了,需要涉及到原型链的传递:
这是《JavaScript Web Application》一书中对bind()的实现:通过设置一个中转构造函数F,使绑定后的函数与调用bind()的函数处于同一原型链上,用new操作符调用绑定后的函数,返回的对象也能正常使用instanceof,因此这是最严谨的bind()实现。
对于为了在浏览器中能支持bind()函数,只需要对上述函数稍微修改即可:
四、模拟代码
模拟call
模拟apply
模拟bind

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
04 pandas DataFrame_创建、文件读取、编码
=== DataFrame 简介 === 定义:数据帧 (DataFrame) 是二维数据结构,即数据以行和列的表格方式排列。 特点: 1、 潜在的列是不同的类型 2、 大小可变 3、 标记轴是行和列 (行、列索引) 4、 可以对行和列进行算数运算 === 创建DataFrame === 将多个Series合并到一起,形成DataFrame 1、使用列表创建[] Tom_dict = {'语文':90,'数学':88,'英语':78} Jerry_dict = {'语文':89,'数学':73,'英语':92} Tom = pd.Series(Tom_dict,name='Tom的成绩') Jerry = pd.Series(Jerry_dict,name='Jerry的成绩') Tom.index.name='科目' Jerry.index.name='科目' # 用DataFrame合并Series # pd.DataFrame(data,index) # 如果Series表示的是一个人的一行数据,那么生成DataFrame的时候使用[] pd.DataFrame([Tom,Jer...
-
下一篇
Coding and Paper Letter(二十一)
资源整理。 1 Coding: 1.R语言包psychmeta,用于心理学方面的的Meta分析。 psychmeta 2.开源项目trug ggplot2, 2018年1月,Tampa的R用户会议关于ggplot2语法的ppt。 trug ggplot2 3.开源项目Residual Attention Network, Residual Attention Network 4.Python库sentinel_api,欧空局哨兵卫星数据的API接口。 esa sentinel 5.R语言开源电子书,有关创建R建模包的建议。 model implementation principles 6.书籍R for Data Sciences的附录指南。 r4ds instructors 7.Python库pyny3d,面向工程的工具,用于交互式构建,工作和执行具有3D几何的着色模拟。 pyny3d 8.R语言包geoparser,geoparser.io的R语言接口。 geoparser 9.微软开源项目nni,用于神经架构搜索和超参数调整的开源AutoML工具包。 nni 10.开源项目Op...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装Nodejs环境
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL数据库在高并发下的优化方案