手写简单call、apply、bind
1、call
~function(){
function call_1(context, ...args){
context = context == undefined ? window : context;
let type = typeof context;
if(!/^('object|function')$/.test(type)){
if(/^('bigint | symbol')$/.test(type)){
context = Object(context)
}else{
context = new context.constructor(context)
}
}
let key = Symbol('key');
context[key] = this;
let result = context[key](...args);
delete context[key];
return result;
}
Function.prototype.call_1 = call_1
}()
2、apply
~function(){
function apply_1(context, args){
context = context == undefined ? window : context;
Array.isArray(args)?args:[];
let type = typeof context;
if(!/^('object|function')$/.test(type)){
if(/^('bigint | symbol')$/.test(type)){
context = Object(context)
}else{
context = new context.constructor(context)
}
}
let key = Symbol('key');
context[key] = this;
let result = context[key](...args);
delete context[key];
return result;
}
Function.prototype.apply_1 = apply_1
}()
3、bind
~function(){
function bind_1(context, ...args){
context = context == undefined ? window : context;
Array.isArray(args)?args:[];
let type = typeof context;
if(!/^('object|function')$/.test(type)){
if(/^('bigint | symbol')$/.test(type)){
context = Object(context)
}else{
context = new context.constructor(context)
}
}
let _this = this
return function(...innerArgs){
_this.call(context, ...args.concat(innerArgs)
}
}
Function.prototype.bind_1 = bind_1
}()
手写简单call、apply、bind的更多相关文章
- 手写简单call,apply,bind
分析一下call的使用方法:call是显示绑定this指向,然后第一个参数是你所指向的this对象,后面跟着多个参数,以逗号隔开 function sum(num1,num2){ return num ...
- 不使用Tomcat,手写简单的web服务
背景: 公司使用的YDB提供了http的查询数据库服务,直接通过url传入sql语句查询数据-_-||.ydb的使用参照:https://www.cnblogs.com/hd-zg/p/7115112 ...
- 手写call、apply、bind
区别&联系 三者都是指定函数执行时的上下文,第一个参数都是上下文: call从第二个参数开始,后续所有的参数传递给函数执行: apply第二个参数是一个数组,传递给函数执行: bind返回一个 ...
- 手写简单的jq雪花飘落
闲来无事,准备写个雪花飘落的效果,没有写太牛逼的特效,极大的简化了代码量,这样容易读取代码,用起来也很简单,对于那些小白简直是福利啊,简单易读易学.先直接上代码吧,然后再一一讲解,直接复制粘贴就可以拿 ...
- 利用Java手写简单的httpserver
前言: 在看完尚学堂JAVA300中讲解如何实现一个最简单的httpserver部分的视频之后, 一.前置知识 1.HTTP协议 当前互联网网页访问主要采用了B/S的模式,既一个浏览器,一个服务器,浏 ...
- 手写简单PE
环境工具:Windows 10 010Editor 目标程序功能: 调用MessageBoxA弹出消息框. 1.构造DOS头 typedef struct _IMAGE_DOS_HEADER { // ...
- 通过反射来手写简单的ORM SQlserver
不说废话,直接上干货,如发现问题,欢迎大家指出,谢谢! //------------------------------------MySQlServerORM [简单 CURD] using Sys ...
- 手写简单的promise
function Promise(fn) { var that = this; this.status = "pedding"; this.value = undefined; / ...
- node搭环境(四)--webpack启服务运行VUE模块文件(手写简单脚手架)
webpack启服务步骤: 1.新建空文件夹webpack-vue.在空文件夹右键点击- GIt Bath here--输入cnpm init--按程序走完会生成package.json文件 2.打开 ...
- 手写简单的php生成Html网页
这个是基本功,以前用到laravel及thinkphp时,这一步,都被设置好了吧. 这里只依靠纯的php环境,而没有任何框架, 而框架,只是将这一切规范化,加快代码效率及减小沟通成本,维护升级也方便, ...
随机推荐
- 记:空格normalize-space处理方法
xpath中定位元素文本含空格 含义:通过去掉前导和尾随空白并使用单个空格替换一系列空白字符,使空白标准化 通俗一点:使要定位的文本元素,去空格并规范化 //li [normalize-space(t ...
- WDA学习(28):Drag &Drop使用
1.21 Drag Drop使用 本实例测试Drag Drop; 运行结果: Drag图标Drop到添加Icon,会将一条记录添加到Table; Drag Table记录Drop到垃圾桶Icon,会将 ...
- HttpClient线程池&重试机制
HttpClientUtils package com.example.http_thread.util; import org.apache.http.HttpEntityEnclosingRequ ...
- 洛谷 P4048更新题面
[JSOI2010]冷冻波 题目描述 WJJ 喜欢"魔兽争霸"这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能 Frozen Nova 每次可以杀死一个小精灵.我们认为,巫妖和小 ...
- IDEA的常用快捷键和文档注释
IDEA的常用快捷键 Alt + 回车 导入包,自动修正 Ctrl + N 查找类 Ctrl + Shift + N 查找文件 Ctrl + Alt + N 格式化代码 Ctrl + Alt + O ...
- 086_Service Cloud
最近一个Call Center的项目刚刚开始,使用的是Sales Cloud + Service Cloud 首先在sfdc上配置一个 call center等一些电话服务的url 安装一个CTI , ...
- Nginx日志切割工具logrorate
1.logrotate系统工具 linux自带logrotate工具 主流的linux系统版本,都默认安装logrotate包,作为分割日志的系统工具,可以方便将日志按周期(日,周,月)和大小进行分割 ...
- Pytorch实战学习(四):加载数据集
<PyTorch深度学习实践>完结合集_哔哩哔哩_bilibili Dataset & Dataloader 1.Dataset & Dataloader作用 ※Datas ...
- AI口算批改、练习小程序
一个口算助手小程序,可以拍照批改作业,口算练习,专为家长辅导孩子学习打造的口算助手. 后端采用java开发 下载源码: http://market.zhenzikj.com/detail/132. ...
- 网页识别语音插件annyang可以实现识别中文
<html> <script src="a.js"></script> <script> if (annyang) { var co ...