当前位置: 首页 > news >正文

JS手写代码篇---手写 new 操作符

3、手写 new 操作符

new就是新建一个对象,new的过程主要有四个

  1. 创建一个新对象:这个新对象的原型被设置为构造函数的 prototype 属性。

    Object.create()
    
  2. 将新对象的 this 上下文绑定到构造函数:这样构造函数内部的 this 就指向了这个新对象。

    apply()
    
  3. 执行构造函数:构造函数内部的代码被执行,通常会对新对象进行一些初始化操作。

  4. 返回新对象:如果构造函数没有返回一个对象或函数,则默认返回新创建的对象;如果构造函数返回了一个对象或函数,则返回该对象或函数。

我们只要按照着四步来,就可以实现手写new

function myNew(constructor , ...args){//1、创建一个新对象:这个新对象的原型被设置为构造函数的 prototype 属性const obj = Object.create(constructor.prototype);//2、将新对象的 this 上下文绑定到构造函数//apply返回的是一个对象或者函数,如果构造函数没有返回一个对象或函数,则默认返回新创建的对象;如果构造函数返回了一个对象或函数,则返回该对象或函数。const res = constructor.apply(constructor , args);if(res && typeof res === 'object' || typeof res === 'function'){return res;}else {return obj;}
}
  1. apply 方法apply 是 JavaScript 中 Function 对象的一个方法,它允许你在一个指定的 this 值上调用函数,并传入一个数组作为参数

    function.apply(function , args) //改变function当中的this指向
    

​ 返回的是构造函数 function 的执行结果。具体来说,它返回的是构造函数内部通过 return 语句返回的值。如果构造函数内部没有显式返回一个对象或函数,那么 function.apply(obj, args) 将返回 undefined

结果:

function Person(name , age){this.name = name;this.age = age;
}
console.log(new Person('lily' , 19))
console.log(myNew(Person , 'lily' , 19))
console.log(myNew(Array , 1,2,3))

在这里插入图片描述

Person(‘lily’ , 19))
console.log(myNew(Person , ‘lily’ , 19))
console.log(myNew(Array , 1,2,3))


[外链图片转存中...(img-kW8TgG9q-1747474809858)]**总结**:new的手写主要通过它实现的四个步骤进行一一实现,创建一个原型被设置为构造函数的 `prototype` 属性的对象,改变this的指向,判断新对象的类型最后进行对应的处理。

相关文章:

  • 数学复习笔记 18
  • MySQL——4、表的约束
  • 匿名函数与闭包(Anonymous Functions and Closures)-《Go语言实战指南》原创
  • 第6章:文件权限
  • 【降维】PCA
  • Captiks无线惯性动捕及步态分析系统:高频采样+400g超宽动态量程,赋能医疗康复、竞技体育、工业检测三大领域,运动轨迹零盲区追踪!”
  • 如何利用Redis实现延迟队列?
  • Windows系统部署MongoDB数据库图文教程
  • String的一些固定程序函数
  • Cadence Allegro安装教程及指导
  • vector(c++)
  • img.dims() <= 2 in function ‘cv::matchTemplate报错
  • OpenAI新发布Codex的全面解析
  • OpenCV 光流估计:从原理到实战
  • JS逆向-某易云音乐下载器
  • OpenCL C++ 常见属性与函数
  • VASP+机器学习快速收敛AIMD
  • 慢速降落字母html
  • 微机电子拉伸试验机
  • 内容安全:使用开源框架Caffe实现上传图片进行敏感内容识别
  • 专利申请全球领先!去年我国卫星导航与位置服务产值超5700亿元
  • 上海天文馆走进徐家汇书院,XR沉浸式天文科普体验再推力作
  • 盐城经济技术开发区党工委书记王旭东接受纪律审查和监察调查
  • 特朗普公开“怼”库克:苹果不应在印度生产手机
  • 阿联酋与美国达成超过2000亿美元协议
  • 一图读懂丨创新创业人才最高补贴500万元!临港新片区发布创客新政“十二条”