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条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装