请问老师new Object()和Object.create()两者有何异同?

来源:4-4 [JavaScript]get/set方法

helloap

2015-06-06 22:34

创建对象时,new Object()和Object.create()两者有何异同?

写回答 关注

11回答

  • 攻城兔
    2015-06-07 02:08:34
    已采纳

    Object.create() 是E5的一个新特性哦,其实可以理解为继承一个对象,create方法有两个参数

    一个是要继承的对象的原型,如果没有就传null,第二个参数是对象的属性描述符,这些都是E5才有的~

    // Demo
    var a = new Object();  // 创建一个对象,没有父类哦
    
    var b = Object.create(a.prototype);  // b 继承了a的原型

    具体对象的原型,属性描述符这些概念可以先去百度学习下哈。我就不详细说了,希望能帮到你

    慕UI553... 回复慕UI553...

    层主也写错了,a是普通对象,不存在prototype值,所以下面一句会报错,应该写成"var b = Object.create(a)",即b继承a,因为a在b的原型链上

    2017-06-27 10:32:16

    共 6 条回复 >

  • 丶低调de菜鸟
    2017-09-02 10:36:37

    请教下你们怎么懂这些的,我学着很累,听不懂,咋办

  • 老夫不是宠物
    2017-08-21 17:56:44

    http://img.mukewang.com/599aae080001a69403120171.jpg

    使用new Object()创建出来的对象和传入的参数对象是恒等的

  • 鄢栋
    2017-06-30 10:59:36

    http://img.mukewang.com/5955be8400014eb407160707.jpg

    详情解说,看图。

    慕侠4705...

    这里b是一个实例,是没有prototype的,只有一个内部指针,指向构造函数的原型,可以使用b._proto_ === a1访问,这里b.prototype是因为b继承了a1,而a1是一个函数,有一个prototype属性,b也继承了该属性

    2018-04-04 23:09:03

    共 1 条回复 >

  • nadirvishun
    2017-03-24 10:58:37
    var a={};
    var a=new Object();
    var a=Object.create(Object.prototype);

    以上三者相同。

  • o铁蛋o
    2017-03-01 08:53:46

    回复 zhangcl:挖坟说一下。首先,var a=new Object();a是构造函数Object创建的对象。所以,a不存在prototype属性。只有函数存在prototype属性,而任何被创建的对象,包括函数都有一个__proto__属性,构成了对象的原型链。所以var b = Object.create(a.prototype); 这句话就是错的。a.prototype根本不存在。alert一下显示undifined。这句话直接写成var b=Object.create(a);就可以了。b的原型对象是a。Object.creat的实现就像楼上说的。而假如像楼上所说,第二句想写出 var b=Object.create(a.constructor.prototype)。那么a.constructor.prototype=Object.prototype。实际上第二句就和var b=new Object()差不多了。但是还是存在点小问题。因为Object.create的实现类似于:

    //Object.create(Object.prototype)
    function fn(){};
    fn.prototype=Object.prototype;
    return new fn();

    所以, var b=Object.create(a.constructor.prototype);这句b虽然是Object的对象,却没有被构造函数Object初始化。就这点小区别。不知道我理解的对不对。

  • izyh
    2016-06-12 19:45:59

    简单来讲,new Object()是一种通过构造函数来创建object的方式,而Object.create(proto, [ propertiesObject ])
    不需要通过构造函数就可以创建一个object,Object.create()的第一个参数是必须要的,第二个参数可选。其实Object.create()内部依然是通过new一个构造函数的方式来实现的,它有构造函数,不过这个构造函数是隐式存在的,看一下使老旧浏览器支持Object.create方法的“polyfill”就可以对它们之间的区别一目了然了:

    if (!Object.create) {
        Object.create = function (o) {
        function F() {}  //定义了一个隐式的构造函数
        F.prototype = o;
        return new F();  //其实还是通过new来实现的
        };
      }

    如果还有不清楚的,欢迎留言讨论。

    一直都在路上

    我知道了,我__proto__少写了下划线导致undefined===undefined

    2016-11-26 13:33:02

    共 2 条回复 >

  • Down_Up
    2016-04-25 20:19:22

    var a = new Object(b);    代表a的原型指向b;

    var a = new Object();     代表a的原型指向Object吧。 

    兿芝梅 回复zhangc...

    为何我试了一下,a===b;为true呢?

    2016-09-26 22:21:08

    共 2 条回复 >

  • qq_小菜_2
    2016-03-07 12:52:41

    a.prototype 返回的是undefine, 应该是a.constructor.prototype 

    慕盖茨730...

    a.constructor 是指向构造函数的, 所以 a.constructor === Object, a.constructor.prototype === Object.prototype

    2017-07-14 22:42:00

    共 1 条回复 >

  • 取名SoHard
    2016-01-14 14:55:14

    1L那位同学说错了吧,var a=new Objiect(); //a具有原型Object.prototype

    慕盖茨730... 回复zhangc...

    a.__proto__ === Object.prototype 三个等号 绝对相等

    2017-07-21 15:08:12

    共 4 条回复 >

  • Qi改好昵称SayGoodNight
    2016-01-12 21:04:53

    赞赞!

JavaScript深入浅出

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

281102 学习 · 1020 问题

查看课程

相似问题