手动实现一个call bind
一、call的实现(apply类似)
//完成版
Function.prototype.setCall = function (obj){
var object = obj || window
let arr = [...arguments]
arr.splice(0,1)
object.func = this // 将函数变成对象的内部属性
object.func(...arr) // 指定函数 并传入参数
delete object.func // 删除函数,当做什么都没发生~
}
// test:
var foo = {
value: 1
};
function show(a,b) {
console.log(this.value);
console.log(a+b)
};
show.setCall(foo,2,4)
二、bind的实现
//完成版
Function.prototype.setBind = function (obj){
var _this = this
return function (){
_this.apply(obj,arguments)
}
} //test
var obj = {
name: 1,
getName: function(){
console.log(this.name)
}
}; var func = function(){
console.log(this.name);
}.bind(obj); func(); // 1
手动实现一个call bind的更多相关文章
- 手写网站服务器~用Python手动实现一个简单的服务器,不借助任何框架在浏览器中输出任意内容
写在前面的一些P话: 在公司网站开发中,我们往往借助于Flask.Django等网站开发框架去提高网站开发效率.那么在面试后端开发工程师的时候,面试官可能就会问到网站开发的底层原理是什么? 我们不止仅 ...
- java web(一) 使用sql标签库+tomcat+mysql手动创建一个jsp练习总结
2016-09-0111:06:53 使用sql标签库+tomcat+mysql手动创建一个jsp 1. 1.1安装tomcat ...
- 手动实现一个list的常用功能
package com.pcxm.list; /** * 手动实现一个list * MyList * @description TODO * @author zhoum * @date 2018年5月 ...
- 如何手动写一个Python脚本自动爬取Bilibili小视频
如何手动写一个Python脚本自动爬取Bilibili小视频 国庆结束之余,某个不务正业的码农不好好干活,在B站瞎逛着,毕竟国庆嘛,还让不让人休息了诶-- 我身边的很多小伙伴们在朋友圈里面晒着出去游玩 ...
- 手动实现一个简易版SpringMvc
版权声明:本篇博客大部分代码引用于公众号:java团长,我只是在作者基础上稍微修改一些内容,内容仅供学习与参考 前言:目前mvc框架经过大浪淘沙,由最初的struts1到struts2,到目前的主流框 ...
- Java 8手动实现一个Collector
我们看一下Stream中的collect的方法. collect(toList())方法由Stream里的值生成一个列表,是一个及早求值的操作. Stream的of方法使用一个初始值生成新的Strea ...
- webpack 打包和手动创建一个vue的项目
首先我们为啥要用webpack,为啥不用其他的打包的工具. 先听我捋捋, Webpack有人也称之为 模块打包机 ,由此也可以看出Webpack更侧重于模块打包,当然我们可以把开发中的所有资源(图片. ...
- 手动实现一个 IOC/DI 容器
第一章为源码解析. 第二章为实现一个简单的 IOC 容器. 第三章进阶 Spring 插件开发. 手动实现一个 IOC/DI 容器 上一篇文章里我们已经对 Spring 的源码有了一个大概的认识,对于 ...
- 原来热加载如此简单,手动写一个 Java 热加载吧
1. 什么是热加载 热加载是指可以在不重启服务的情况下让更改的代码生效,热加载可以显著的提升开发以及调试的效率,它是基于 Java 的类加载器实现的,但是由于热加载的不安全性,一般不会用于正式的生产环 ...
- 【转载】 C#中手动创建一个DataTable对象并写入数据
在C#操作集合数据的过程中,有时候需要手动创建一个DataTable对象,并手动设置DataTable对象的Columns列名等信息,最后再往手动创建的DataTable对象中写入相应的数据信息,此时 ...
随机推荐
- 【python】python3.7与3.9共存,两个3版本同时存在(平时用vscode敲代码)pip复制
1.按照安装python及环境配置 - 人间寒梅 - 博客园 (cnblogs.com),将3.9装好. 2.在官网下载3.7的对应文件 3.下载后运行,并自定义下载且选中添加到path.,自己为py ...
- mysql大小写无法区分问题
1.在创建表时设置编码格式 ALTER TABLE `test`.`t_test` COLLATE=utf8mb4_bin; 只能在建表或者没有数据时设置. 还有其他比如改字段格式,比如将varcha ...
- linux 基础命令 apt
Linux apt 命令 apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器. apt 命令提供了查找.安装.升级.删 ...
- linux 学习shell
1. bash的父进程,子进程 [root@A~]# my_var=123[root@A~]# echo $my_var123[root@A~]# bash[root@A~]# [root@A~]# ...
- C#函数编程学习
知识补缺 //用Func委托写简单函数 Func<int,int> add = i => i + 1; //定义一个只读属性 public class Tea { public Te ...
- 判断MP4 文件
public class CheckResult { public bool IsMp4 { get; set; } public bool SupportStrea ...
- 2vue
事件 v-on:click="handle" @click="handle" handle创建在methods里 <!DOCTYPE html> & ...
- APIView使用
1 CBV源码分析 # 基于类的视图--->讲过了 -必须要继承它:from django.views import View # drf的东西,都是写cbv,必须要继承View##### ...
- Servlet(三)
dom4j 元素对象获取指定子元素 element("名字") ServletConfig: 1.在Servlet运行时,需要获取servlet的配置信息 可以使用servlet ...
- Mybatis二级缓存问题
一.缓存介绍. Mybatis提供了缓存服务,以减缓数据库压力: Mybatis的查询缓存总共有两级,我们称之为一级缓存和二级缓存,如图: 1.一级缓存是SqlSession级别的缓存.在操作数据 ...