手写简单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环境,而没有任何框架, 而框架,只是将这一切规范化,加快代码效率及减小沟通成本,维护升级也方便, ...
随机推荐
- sql server某列根据逗号转多行,其它字段不变
效果: 语句代码: declare @moulds varchar(4000); set @moulds='55-480730-03,55-487780-01,,55-487780-02 '; dec ...
- JS中两个数组对象筛选
const arr1 = [ {id: 1, name: 'aaa'}, {id: 2, name: 'bbb'}, {id: 3, name: 'ccc'}, {id: 4, name: 'ddd' ...
- Activity 的窗口去头的方式
1\窗口去头的第一种方式 public class SplashActivity extends Activity { @Override protected void onCreate(Bundle ...
- Unity模型剖切
效果展示 1.首先先下载一个模型剖切插件Cross-Section插件 没有的下方链接自取 插件下载链接 2.下载之后导入到项目 导入之后的样子如下图 因项目需求需要剖切模型,要使用滑动条进行剖切, ...
- vue-表格拖拽
1. el-table结合sortable 参考:https://blog.csdn.net/weixin_42460570/article/details/125765599?ops_request ...
- 使用Libusb测试USB device
一. 先准备好测试工具 -- Libusb: 在Linux中使用的话: 首先从 http://www.libusb.org/官网中下载libusb 然后解压之后./configure --> m ...
- VS Code第一部分--创建
第一步:Win键+R cmd 打开之后 输入 vue ui 运行结束后 会显示一个仪表盘页面 点击左下方的更多 点击项目管理器 点击创建 输入自己创建的文件夹地址 按回车保存 点击下方的创建 ...
- docker+gunicorn+fastapi部署
一.准备工作 1.先确保项目可以正常运行 2.使用pip freeze导出第三方库 3.在项目根目录新建pip.conf文件,写入一下内容 [global] index-url=http://pypi ...
- (原创)odoo15(master)下,列表导出权限控制
列表导出增加一个内置用户组"base.group_allow_export"以增强权限控制.
- c++文件中,头文件与实现文件该写什么内容
1. 参考https://www.cnblogs.com/fenghuan/p/4794514.html