首页 > 其他分享 >手写Call bind

手写Call bind

时间:2023-12-16 17:00:45浏览次数:32  
标签:function ... const bind Call context 手写 prototype fn

手写Call

Function.prototype.MyCall = function(context){
    var context  = context ?? window;
    let fnSymbol = Symbol();
    context[fnSymbol] = this;
    const arg = [...arguments].slice(1);
    let res = context[fnSymbol](...arg);
    delete context[fnSymbol]
    return res;
  }

  const obj = {
    name: '123',
  }

  function bar(gender,age){
    // 函数有返回值==》需要返回
    return {
      name:this.name,
      gender,
      age
    }
  }

  console.log(bar.MyCall(obj,['男',46]));

手写bind

    const obj = {
      name: '刘德华'
    }

    const person = function () {
      //该fn做为构造函数使用,此时的name为undefined
      console.log(this.name)
      console.log(arguments, 'arguments')
    }

    person.prototype.friend = '123123'

    Function.prototype.myBind = function (context, ...args) {
      const _this = this;
      const tempFun = function(){}
      const fn = function (...returnArgs) {
        _this.apply(this instanceof fn ? this : context, [...args, ...returnArgs])
      }
      tempFun.prototype = this.prototype;
      fn.prototype = new tempFun();
      return fn
    }

  const fn =  person.myBind(obj, 1, 2)
  const bibi = new fn()
  // 此时需要将person.prototype 与 bibi 串联起来

标签:function,...,const,bind,Call,context,手写,prototype,fn
From: https://www.cnblogs.com/crazy-rock/p/17904781.html

相关文章

  • 读程序员的README笔记12_On-Call
    1. 行为准则2. On-Call工程师2.1. On-Call工程师是应对计划外工作的第一道防线,无论是生产环境问题还是临时支持请求2.2. 将深度工作与运维工作分开,可以让团队中的大多数人专注于开发任务2.3. On-Call工程师只需专注于不可预知的运维难题和支持任务3. On-Call的工作方......
  • 为什么要使用Object.prototype.hasOwnProperty.call()?
    翻译自:What’sthedealwithObject.prototype.hasOwnProperty.call()?你一定在他人的代码或者某个库中见过下面的代码:Object.prototype.hasOwnProperty.call(objRef,'propName');现在我们来看下这段代码到底什么意思。在弄清楚的过程中,我们会依次理解下面几件事:Object.p......
  • 使用Apache POI 导入导出时出现You need to call a different part of POI to process
    问题复现在学习导出功能时使用HSSFWorkbook导出了一个xxx.xlsx格式的文件,然后用XSSFWorkbook的读取方式来拿文件去导入时出现了这个bug这是当时做导出测试代码Workbookwb=newHSSFWorkbook();CreationHelpercreationHelper=wb.getCreationHelper();Sheetsheet=wb.cr......
  • uniapp开发——纯原生渲染nvue调用uni.makePhoneCall没反应的处理办法
    uni.makePhoneCall(OBJECT)|uni-app官网(dcloud.net.cn)正常情况下,manifest.json配置拨打电话的权限就可以了:配置权限后重新打包,真机运行应该就可以正常的拨打电话了。如果API没反应,那么可以试试下边这种不弹出询问框直接拨打电话的方法:callMobile(){letmobile......
  • cbindgen rust 代码生成c binding 的工具
    rust与c以及c与rust的互调用还是比较常见的需求,很多时候自己写可能比较费事,但是使用一些工具就比较方便了cbindgen是一个对于rust代码生成cbinding的工具参考使用基于cbindgen将rust的代码生成对应的c头文件,之后基于cmake构建项目项目结构 ├──......
  • react_hooks系列 useCallback,高阶函数memo
    react_hooks的useCallback,高阶函数memo一、概念和作用1、memo高阶函数:memo解决的是函数式组件的无效渲染问题,当函数式组件重新渲染时,会先判断数据是否发生了变化。相当于类组件的PureComponent(默认提供ShouldComponentUpdate)2、useCallback:1)、useCallback会返回一个函数的memoiz......
  • WSL更新失败(退出代码: 1603) - Error code: Wsl/CallMsi/E_ABORT
    Whathappened?WSL莫名其妙的更新了,完成更新以后莫名奇妙地启动不起来了。每次运行WSL的时候都会给我提示WSL正在完成升级...更新失败(退出代码:1603)。Errorcode:Wsl/CallMsi/E_ABORT抓耳挠腮找了半天,我甚至不管写了一半的代码和笔记,把WSL卸载后重装,结果居然无法启动......
  • wpf data binding
     publicpartialclassWindow2:Window{publicPersonvmPerosn=newPerson();publicWindow2(){InitializeComponent();vmPerosn.Name="JackZhao";vmPerosn.Phone=&qu......
  • 关于键盘导航顺序和 tabindex 属性的关联关系
    "tabindex"属性是HTML元素中的一个属性,用于定义元素在通过键盘导航时的顺序。该属性接受一个整数值,通常为正整数,用于指定元素的tab键顺序。但是,当"tabindex"属性的值为-1时,它有特殊的含义。当"tabindex"的值为-1时,它表示该元素虽然可以通过JavaScript聚焦,但在通过按下Tab键进行导......
  • javaScript/js 【call,apply,bind】
    在JavaScript中,call、apply和bind都是用于改变函数执行上下文(this的值)的方法。它们在不同的情境下有不同的用途。call方法:call方法允许你调用一个函数,并指定该函数内部的this值,以及将参数以单独的参数传递给函数。functiongreet(name){console.log(`Hello,${name}!Ia......