首页 > 其他分享 >JS手写

JS手写

时间:2023-01-04 04:44:05浏览次数:36  
标签:function ... obj args JS result 手写 fn

apply

function myApply(obj,args){
    /*
    1. this指向调用者
    2. 使用隐式绑定 obj.fn = this
    3. obj.fn()
    4. 调用完以后删除fn
    */
    // 确保obj是一个对象
    obj = (obj===null || obj === undefined) ? window:Object(obj)
    
    
    obj.fn = this
    obj.fn(...args)
    delete obj.fn
}

// 添加到Function原型上
Function.prototype.myApply = myApply

call

Function.prototype.myCall = function(obj,...args){
    obj = (obj===null || obj === undefined) ? window:Object(obj)
    obj.fn = this
    obj.fn(...args)
    delete obj.fn
}

bind

Function.prototype.myBind = function(obj,...args){
    // 判断是否为对象类型
    obj = obj ===null||obj ===undefined ? window:Object(obj)
    obj.fn = this
    return (...fnArgs)=>{
        obj.fn(...args,...fnArgs)
    }
}

new

function myNew(fn){
    /*
    0. 判断是否是一个函数
    1. 创建一个空对象,对象的原型指向fn的原型
    2. fn绑定this
    3. 返回对象或fn的返回值
    */
    if (typeof fn !== 'function') {
        throw 'must be a function'
    }
    var obj = Object.create(fn.prototype)
    var args = [...arguments].slice(1)
    var result = fn.apply(obj,args)
    
    if ((typeof result ==='object' && typeof result !== null) || typeof result ==='function') {
        return result
    }
    return obj
}

标签:function,...,obj,args,JS,result,手写,fn
From: https://www.cnblogs.com/hyf120/p/17023847.html

相关文章

  • 手写虚拟dom转真实dom
    /***vnode转化成真实DOM,实现思路*1.render函数,render(vnode,container)*2.createDom,根据参数创建对应的标签*3.根据属性,新建还是更新,如果有children,则递归r......
  • js手写缓存累积
    //实现累乘缓存//缓存输出1,2,3下次2,3,1也能直接获取结果functionmultiplicationCatch(){letmap={}returnfunction(...params){//排序之后,内......
  • Node.js
    @目录Node.js引入环境安装以及测试fs文件系统模块读取文件写入内容path路径模块http模块模块化npm与包包包的下载npm初体验模块的加载机制Express初识ExpressExpress的基本......
  • Vue.js
    @目录1、vue核心基础1.1、安装1.2、HelloVue1.3、模板语法1.4、数据绑定1.5、el与data的两种写法1.6、理解MVVM模型1.7、Object.defineProperty方法1.8、数据代理1.9、事......
  • 【问题记录】【SpringBoot】【Jackson】SpringBoot返回的json结果,某个属性有值结果却
    1 问题描述代码如下:@DatastaticclassDemo{@JsonProperty(index=1)privateStringmenu;@JsonProperty(index=1)pri......
  • jstack和线程dump分析
          jstack命令的语法格式:jstack <pid>。可以用jps查看java进程id。这里要注意的是:      1.不同的JAVA虚机的线程DUMP的创建方法和文件格式是不一样的,......
  • js有关dom操作学习
    dom对象就是操作网页的documentdom节点:整个文档是一个文档节点(document对象)每个HTML元素是元素节点(element对象)HTML元素内的文本是文本节点(text对象......
  • js 之二 事件对象
    事件对象/当事件的响应函数被触发时,浏览器每次都会讲一个事件对象作为实参传递响应函数;在事件对象中封装了当前事件相关的一切信息,比如:鼠标的,键盘的操作//当鼠标在are......
  • 博客使用框架(js)公示
    博客使用框架公示......
  • 阿里巴巴 FastJson 使用入门
    1.首先依赖 版本的话一般1.2.58以上都可以<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.58</version></de......