程序之路

new Object 和 Object.create的区别

2019-07-12  本文已影响0人  super静_jingjing

一起来学习一下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将指向该对象)。如果protonull,那么创建出来的对象是一个{}并且没有原型。

image.png
image.png

propertiesObject :可选,给新对象添加新属性以及描述器。如果没有指定即创建一个{},有原型也有继承Object.prototype上的方法。可参考 Object.defineProperties() - mdn 的第二个参数。

image.png

实现一个自己的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 关键字会进行如下的操作

区别

上一篇 下一篇

猜你喜欢

热点阅读