首页 > 编程语言 >javascript 手动实现 bind,call,apply

javascript 手动实现 bind,call,apply

时间:2023-11-08 10:11:18浏览次数:38  
标签:... args console log bind javascript content call myThis

 

js 手动实现call方法

    Function.prototype.myCall=function(content,...args){
        let myfn = Symbol()
        content = content|| globalThis
        // console.log(content)
        content[myfn] = this
        // console.log(content)
        const result = content[myfn](...args)
        delete content[myfn]
        // console.log(content)
        return result
    }


    function myFn(a,b){
        console.log(this.name,a,b)
        return 1
    }
    console.log(myFn.myCall({name:'zhang'},3,4))

 

js 手动实现apply方法

 

Function.prototype.myApply = function(myThis,args){
        myThis = myThis || globalThis;
        args = args || []
        const fnName = Symbol()
        myThis[fnName] = this
        const result = myThis[fnName](...args)
        delete myThis[fnName]
        return result
    }

    function myFn(a,b){
        console.log(this.name,a,b)
        return 1
    }
    console.log(myFn.myApply({name:'zhang'},[3,4]))

 

js 手动实现bind方法

Function.prototype.myBind = function(myThis,...args1){

        const myfn = this
        return function(...args2){
            const result = myfn.apply(myThis,[...args1,...args2])
            console.log(myfn,myThis)
            return result;
        }
    }

    function myFn(...args){
        console.log(this.name,args)
        return 1
    }
    let a = myFn.myBind({name:'zhang'},3,4)
    console.log(a(5,6))
    console.log(a(5,6,7,8,9))

    let b = myFn.myBind({name:'zhang'},3,4)
    console.log(b(5,6))
    console.log(b(5,6,7,8,9))

 

标签:...,args,console,log,bind,javascript,content,call,myThis
From: https://www.cnblogs.com/tongchuanxing/p/17816728.html

相关文章

  • JavaScript--变量和数据类型
    使用var声明变量vartest=20;test="张三";变量可以存放不同类型的值var定义域分布在全局并且可以重复定义letlet关键字所在的代码块内有效JavaScript中分为:原始类型和引用类型5种原始类型number:数字,整数或者小数string:字符、字符串boolean:布尔null:空undefined:......
  • 【JavaScript】事件轮询
    1、先参考搞懂JavsScript异步— 事件轮询2、明确几点:setTimeout、DOMEvent、HttpRequest、setInterval、setImmediate(Node.js独有)的回调、I/O操作、UI渲染均会被加载到消息队列(macrotask宏任务)。Promise的回调、MutationObserver、process.nextTick(Node.js独有)会被加......
  • ArcGIS API for JavaScript入门
    arcgis官网:https://arcgis.fenxianglu.cn/docs/load.html一、集成到应用----@arcgis/core方式1、引入ArcGISAPIforJavaScriptyarnadd@arcgis/core或者指定安装版本yarnadd@arcgis/[email protected]如果提示:'yarn'不是内部或外部命令,也不是可运行的程序或批处理文件......
  • JavaScript-Text节点
    Text节点的概念文本节点(Text)代表元素节点(Element)和属性节点(Attribute)的文本内容。如果一个节点只包含一段文本,那么它就有一个文本子节点,代表该节点的文本内容。通常我们使用父节点的firstChild、nextSibling等属性获取文本节点,或者使用Document节点的createTextNode方法创造一个文......
  • JavaScript了解
    JavaScript简介JavaScript是一门跨平台、面向对象的脚本语言,而Java语言也是跨平台的、面向对象的语言,只不过Java是编译语言,是需要编译成字节码文件才能运行的;JavaScript是脚本语言,不需要编译,由浏览器直接解析并执行。JavaScript是用来控制网页行为的,它能使网页可交互那么它可以做......
  • Unity如何优化Drawcall
    降低游戏的Drawcall,是渲染优化很重要的手段,接下来从以下4个方面来分析如何降低DrawCall:(1)降低Drawcall的意义是什么?如何查看游戏的Drawcall;(2)Drawcall合批的常用的技术手段原理与优缺点;(3)组织项目让Drawcall最小需要注意的点;搞清楚这些,Drawcall的优化基本上就能很......
  • 21 个最佳 Javascript IDE 和代码编辑器 [CSS、HTML、JavaScript]
    这是我们挑选的21个最佳JavaScriptIDE和源代码编辑器。目录什么是IDE选择正确的开发环境时要寻找什么?免费的最佳JavascriptIDE最佳高级JavascriptIDE结论:最佳JavaScriptIDE是哪个?常见问题解答:最佳JavascriptIDE如今,Javascript在前端开发中越来越流行。您......
  • asp.net中怎样用Javascript控制RequiredFieldValidator控件什么时候启用,什么时候不启
    Enable/DisableRequiredFieldValidatorwithJavascriptdocument.getElementById("requiredfieldvalidatorid").enabled=false;<asp:DropDownListID="ddlServiceName"runat="server"onchange='varDateValidator=docume......
  • BindException、ConstraintViolationException、MethodArgumentNotValidException入参
    Springvalidation验证框架注解Springvalidation验证框架提供了大量接口入参检验注解,注意三个非空注解:@NotNull:验证对象是否不为null,无法查检长度为0的字符串@NotBlank:检查约束(字符串)是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格@NotEmpty:检查(集合)......
  • ServiceAccount ClusterRole ClusterRoleBinding
    RoleBinding的作用是把ServiceAccount绑定到Role上,Role规定了可以对资源做的操作,把ServiceAccount绑定到Role上就表示拿到这个ServiceAccount的程序就有了权限对资源做这些操作。当然,有ClusterRole和ClusterRoleBinding,ClusterRole可以在包括所有NameSpce和集群级别的资源或非资......