手写 bind

news/2024/7/10 22:38:43 标签: javascript, 前端, 开发语言, es6

手写 bind

  •  思路:
  1.   myBind是挂载在Function的原型上的
  2.  返回值是一个函数,该函数的返回值是原函数的返回结果
  3.  原函数的参数不变
javascript">function fn(age, sex) {
    this.age = age
    this.sex = sex
    console.log(this);
}
// myBind是挂载在Function的原型上的
Function.prototype.myBind = function () {
    // 保存调用 myBind 的上下文 this
    const _this = this
    // 保存调用 myBind 时的参数
    const args = Array.prototype.slice.call(arguments)
    // 保存调用 myBind 时传的 this
    const newThis = args.shift()
    // 返回值是一个函数
    return function () {
        // 返回值是原函数的返回结果
        // 原来的函数要执行,并且将 this 改变为调用 myBind 时传的参数1,并将调用 myBind 时传递的参数传递给 原函数
        _this.apply(newThis, args)
    }
}

const obj = {
    name: 'zs'
}

const fnMyBind = fn.myBind(obj, 18, '男')
fnMyBind()


http://www.niftyadmin.cn/n/1409159.html

相关文章

春晚微信红包,是怎么扛住一百亿次请求的

今天下午跟大家分享的主题是如何实现“有把握”的春晚摇一摇系统。回忆一下春晚的活动,有什么样的活动形式呢? 当时我们是直接复用客户端摇一摇入口,专门给春晚摇一摇定制了一个页面,可以摇出“现金拜年”、“红包”。底下的红包肯…

Hive_使用ACID事务特性实现渐变维度SCD2操作

背景 基于维度模型理论的数据仓库中,一个特别重要的部分是渐变维度的处理,其中用的最多的方法是对维度表进行SCD2类型拉链表操作。具体实现使用upsert模式,即更新旧数据的时间戳,并且插入新数据。 但是在使用Hive作为数据仓库的场…

arduino无源蜂鸣器歌曲编码_基于Arduino的迷你电子琴

前言一直以来都没有系统地学过微控制器,使用 Arduino 时,也是通过现成的制作和代码进行修改,东一榔头西一锤,很多基础的东西并不了解。前段时间,搜索 matlab 的教程时,知道了台大生机系的郭彦甫老师&#x…

作用域链/this指向常见面试题

作用域链 作用域链:通过创建态决定的手动取消全局作用域:通过块级作用域 let a global console.log(a);//global function course() {let b this指向console.log(b);//this指向session()function session() {let c thisconsole.log(c);//thisteacher()function teacher() {…

catalina.out

翻了下收藏夹,顺手整理到这里来。 catalina.out文件会越来越大,对系统的稳定造成了一定的影响。conf/logging.properties 一般在部署Tomcat后,运行久了,catalina.out文件会越来越大,对系统的稳定造成了一定的影响。 可…

09-伪数组 arguments

arguments代表的是实参。有个讲究的地方是:arguments只在函数中使用。 (1)返回函数实参的个数:arguments.length 例子: fn(2,4);fn(2,4,6);fn(2,4,6,8);function fn(a,b,c) {console.log(arguments);console.log(fn.le…

手写体识别代码_图文需要扫描很麻烦,Python也能识别看到的好文章了!快用它一键扫描吧...

Python近几年凭借其独特的语言优势,火热程度直接紧逼各大老牌语言,比如Java,PHP等等。小编今天就带大家来用Python开发项目,一键扫描文档。OCR与Tesseract介绍将图片翻译成文字一般被称为光学文字识别(Optical Charact…

vue3组件批量注册

组件内起名字 <template><div>M1</div> </template><script> export default {name: "M1", }; </script><style></style>component/index.js中 const requireAll require.context("/components", true…