new Object 和 Object.create的区别
一起来学习一下new Object 和 Object.create,先贴一个代码来看一下输出结果。
let obj1 = Object.create({x:1}); //obj1 = {} let obj2 = new Object({x:1}); // obj2 = {x: 1}
可以明显的看到结果完全不一样,说好都是创建一个对象的呢。那先来看一下Object.create到底是做了什么。
Object.create
MDN官方定义: Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的proto。
换个比较容易理解的说法:将现有的对象指定为原型proto,及其属性propertiesObject去创建一个新的对象。
Object.create接受两个参数,即object.create(proto, propertiesObject)
proto
: 现有的对象,即新对象的原型对象(新创建的对象proto将指向该对象)。如果proto
为null
,那么创建出来的对象是一个{}并且没有原型。
propertiesObject
:可选,给新对象添加新属性以及描述器。如果没有指定即创建一个{},有原型也有继承Object.prototype上的方法。可参考 Object.defineProperties() - mdn 的第二个参数。
实现一个自己的object.create
function myCreate(proto,properties){ //新对象 var fn = function() { }; fn.prototype = proto; if(properties){ //defineProperties 在新对象上定义新的属性或修改现有属性 Object.defineProperties(fn, properties) } return new fn(); }
new Object()
new 创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。
new 关键字会进行如下的操作
创建一个空的简单JavaScript对象(即{});
链接该对象(即设置该对象的构造函数)到另一个对象 ;
将步骤1新创建的对象作为this的上下文 ;
如果该函数没有返回对象,则返回this。
new会创建一个新对象,并且这个新对象继承构造函数的prototype,也就是说创建的实例的proto指向构造函数的prototype
new Object()会创建一个实例,该实例的proto指向Object的prototype
区别
new Object()继承内置对象Object,Object.create继承指定对象
可以通过Object.create(null) 创建一个干净的对象,也就是没有原型,而 new Object() 创建的对象是 Object的实例,原型永远指向Object.prototype.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)