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的指向,判断新对象的类型最后进行对应的处理。
相关推荐
刘琦沛在进步4 分钟前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
机器视觉的发动机15 分钟前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
HyperAI超神经23 分钟前
在线教程|DeepSeek-OCR 2公式/表格解析同步改善,以低视觉token成本实现近4%的性能跃迁
开发语言·人工智能·深度学习·神经网络·机器学习·ocr·创业创新
R_.L33 分钟前
【QT】常用控件(按钮类控件、显示类控件、输入类控件、多元素控件、容器类控件、布局管理器)
开发语言·qt
Zach_yuan42 分钟前
自定义协议:实现网络计算器
linux·服务器·开发语言·网络
云姜.1 小时前
java多态
java·开发语言·c++
CoderCodingNo1 小时前
【GESP】C++五级练习题 luogu-P1865 A % B Problem
开发语言·c++·算法
陳10301 小时前
C++:红黑树
开发语言·c++
一切尽在,你来1 小时前
C++ 零基础教程 - 第 6 讲 常用运算符教程
开发语言·c++
泉-java1 小时前
第56条:为所有导出的API元素编写文档注释 《Effective Java》
java·开发语言