bind、call、apply
call实现:
思路:可以给新的对象添加一个函数,然后在执行完以后删除。
Function.prototype.myCall = function(context){// 不传入第一个参数,默认为windowvar context = context || window;//给新的对象添加一个函数,this指向一个函数context.fn = this;//arguments为Call里面的参数var args = [...arguments].slice(1);var result = context.fn(...args);delete context.fn;return result;
};
function sayName(){console.log(this.name);
}
var obj = {name:'kimi',age:26,work:'web'
};
sayName.myCall(obj,'age');复制代码
apply实现:
Function.prototype.myApply = function(context){var context = context || window;context.fn = this;var result;//判断是否存在第二个参数,如果存在,就将第二个参数展开if(arguments[1]){result = context.fn(...arguments[1]);}else{result = context.fn();}delete context.fn;return result;
};复制代码
bind:该方法会返回一个函数。
Function.prototype.mybind = function(context){if(typeof this !== 'function'){throw new TypeError('Error')}var _this = this;var args = [...arguments].slice(1);return function F(){if(this instanceof F){return new _this(...args.concat(...arguments));}else{return _this.apply(context,args.concat(...arguments));}}
};复制代码
bind、call、apply相关推荐
- Javascript 中 apply、call、bind
在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. JavaScript 的一大 ...
- Javascript中的apply、call、bind
apply . call .bind 三者都是用来改变函数的this对象的指向的: apply . call .bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文: apply . ...
- js中bind、call、apply函数的用法
最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web 的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站. ...
- [转] 深入浅出 妙用Javascript中apply、call、bind
[From] http://www.admin10000.com/document/6711.html 网上文章虽多,大多复制粘贴,且晦涩难懂,我希望能够通过这篇文章,能够清晰的提升对apply.ca ...
- 深入Javascript中apply、call、bind
最近在看一下node package的源码,发现很多里面都包含了function这个对象的apply.call.bind这三个方法,于是想拿出来再看看.. apply.call 在 javascrip ...
- 【优雅代码】深入浅出 妙用Javascript中apply、call、bind
这篇文章实在是很难下笔,因为网上相关文章不胜枚举. 巧合的是前些天看到阮老师的一篇文章的一句话: "对我来说,博客首先是一种知识管理工具,其次才是传播工具.我的技术文章,主要用来整理我还不懂 ...
- JavaScript -- arguments、apply 、call、bind
前言 笔记来源:JavaScript 高级程序设计 笔记内容:apply .call.bind 相同点与不同点 运行环境:浏览器环境 arguments ECMAScript 中的参数在内部是用一个数 ...
- 手动实现apply、call、bind
手动实现apply.call.bind 每个Function对象都存在apply().call().bind()方法,其作用都是可以在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函 ...
- apply()、call()、bind()
apply().call().bind() 每个Function对象都存在apply().call().bind()方法,其作用都是可以在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩 ...
- 关键字this、new;apply、call、bind方法的用法
一.this 1. 定义 引用MDN的说法:当使用在函数中时,this指代当前对象,即调用了函数的对象.如果在一个对象上使用了点或者方括号来访问属性或者方法,这个对象就成了this.如果访问属性或者方 ...
最新文章
- 批改网作文提交时分析不出来_小学生作文写作从哪些方面提高呢?
- aes c# java_AES加密,C#和java相同
- Go案例说明defer panic recover
- SAP云平台 CloudFoundry环境下的space guid
- 【渝粤教育】广东开放大学 计算机思维 形成性考核 (29)
- java学习(76):GUL单选按钮和复选按钮
- 如何确定你的伴侣真的爱你?复杂数学公式告诉你
- 一步步创建第一个Docker App —— 4. 部署应用
- linux时间界面返回,Android开发教程:游戏过程中按Home键后返回游戏界面
- 同步异步和阻塞3-同步阻塞
- Android App混合开发
- python打砖块游戏程序设计报告_打砖块游戏课程设计报告
- JavaScript---文件下载处理文件下载失败兼容IE11文件下载
- 使用Xposed去除微博国际版的启动广告
- IT项目经理沟通技巧的重要性
- Linux基础之vim
- 为什么大部分企业面试官都会问GMV,GMV是什么?
- 一文读懂三种并发控制机制(封锁、时间戳、有效性确认,大量例子+证明)
- 【ELM分类】基于matlab遗传算法优化ELM神经网络数据分类【含Matlab源码 2138期】
- Python进行远程视频监控
热门文章
- HTML有几种发音模式,html – 使用lang属性和拼音发音的正确方法是什么(如果有的话)?...
- mybatis 大于小于转义_10 HTML5特性、转义字符和注释
- html h 不换行,css 强制不换行
- 华为鸿蒙osbeta多场景展示,华为发布鸿蒙系统:全场景分布式OS
- linux使用线程实现生产者消费者问题,Linux平台下线程同步,实现“生产者消费者问题”...
- 从属关系mysql_关系型数据库基础概念:MySQL系列之开篇
- count(*)效率提高_想使用多线程来提高处理速度,却还不知道使用CountDownLatch与CyclicBarries?...
- 智能车竞赛技术报告 | 智能车视觉 - 青岛科技大学 - 飞猪
- 2021年春季学期-信号与系统-第十一次作业参考答案-第二小题
- 有的人撑死,有的人饿死,有的人吓死