bind以及手动实现bind

简介: bind以及手动实现bind

什么是 bind

bind() 方法会创建一个新函数。当这个新函数被调用时,bind() 的第一个参数将作为它运行时的 this,之后的一序列参数将会在传递的实参前传入作为它的参数。(来自于 MDN )

var foo = {
  value: 1,
};

function bar() {
  console.log(this.value);
}

// 返回了一个函数
var bindFoo = bar.bind(foo);

bindFoo(); // 1

手动实现 bind

手动实现 bind 有以下几个需要注意的地方

  1. 返回的是一个函数
  2. 可以传入参数
Function.prototype.bind2 = function (context) {
  if (typeof this !== "function") {
    throw new Error(
      "Function.prototype.bind - what is trying to be bound is not callable"
    );
  }

  var self = this;
  var args = Array.prototype.slice.call(arguments, 1);

  var fNOP = function () {};

  var fBound = function () {
    var bindArgs = Array.prototype.slice.call(arguments);
    return self.apply(
      this instanceof fNOP ? this : context,
      args.concat(bindArgs)
    );
  };

  fNOP.prototype = this.prototype;
  fBound.prototype = new fNOP();
  return fBound;
};
目录
相关文章
|
9月前
|
传感器 人工智能 大数据
高科技生命体征探测器、情绪感受器以及传感器背后的大数据平台在健康监测、生命体征检测领域的设想与系统构建
本系统由健康传感器、大数据云平台和脑机接口设备组成。传感器内置生命体征感应器、全球无线定位、人脸识别摄像头等,搜集超出现有科学认知的生命体征信息。云平台整合大数据、云计算与AI,处理并传输数据至接收者大脑芯片,实现实时健康监测。脑机接口设备通过先进通讯技术,实现对健康信息的实时感知与反馈,确保身份验证与数据安全。
|
机器学习/深度学习 自然语言处理 算法
精通 Transformers(一)(1)
精通 Transformers(一)
291 2
|
Linux 调度 数据库
Django使用django-apscheduler实现定时任务
【7月更文挑战第8天】定时任务可以在后台定时执行指定的代码,避免了很多人为操作。下面是在Django项目中如何使用定时任务的具体操作流程
1054 1
|
12月前
|
Shell PHP
escapeshellarg() 函数
escapeshellarg() 函数
|
SQL 算法 Java
(二十六)MySQL分库篇:Sharding-Sphere分库分表框架的保姆级教学!
前面《MySQL主从原理篇》、《MySQL主从实践篇》两章中聊明白了MySQL主备读写分离、多主多写热备等方案,但如果这些高可用架构依旧无法满足业务规模,或业务增长的需要,此时就需要考虑选用分库分表架构。
5241 4
面试必考: 手撕代码系列(一)
面试必考: 手撕代码系列(一)
329 0
|
前端开发
css中如何在一行计算固定宽度和自适应宽度
css中如何在一行计算固定宽度和自适应宽度
141 0
|
JavaScript
【JS】获取当前<script>标签src属性的url跟的参数和相对路径(无论引入的JS是外部、内部)
【JS】获取当前<script>标签src属性的url跟的参数和相对路径(无论引入的JS是外部、内部)
1139 0
|
网络协议 算法 安全
HTTP的短连接、长连接管理
HTTP的短连接、长连接管理
397 0
HTTP的短连接、长连接管理
|
SQL 前端开发 Java
图书模板之加载图书 | 学习笔记
快速学习图书模板之加载图书
194 0
图书模板之加载图书 | 学习笔记