在调用new的过程中会发生以上四件事情:
1.新生成了一个对象
2.链接到原型
3.绑定this
4.返回新对象
function create() { let obj = {} //创建一个新对象 let Con = [].shift.call(arguments)//拿到arguments的第一项,类数组不能调用数组的方法shift obj.__proto__ = Con.prototype //让新对象原型等于构造函数的原型 let result = Con.apply(obj, arguments) //传参 return result instanceof Object ? result : obj //构造函数的return语句返回一个数值。这时,new命令就会忽略这个return语句,返回“构造”后的this对象。 //但是,如果return语句返回的是一个跟this无关的新对象,new命令会返回这个新对象,而不是this对象。这一点需要特别引起注意。 //普通函数(内部没有this关键字的函数)使用new命令,则会返回一个空对象。 } function Person(name,age){ this.name = name this.age = age } var person = new Person() create(person,'张三',20)
以下是对实现的分析:
创建一个空对象
获取构造函数
设置空对象的原型
绑定 this 并执行构造函数
确保返回值为对象
通过 new 的方式创建对象和通过字面量创建有什么区别?
对于创建一个对象来说,更推荐使用字面量的方式创建对象(无论性能上还是可读性)。因为你使用 new Object() 的方式创建对象需要通过作用域链一层层找到 Object ,但是你使用字面量的方式就没这个问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)