问答详情
源自:4-4 [JavaScript]get/set方法

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

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

提问者:helloap 2015-06-06 22:34

个回答

  • 攻城兔
    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的原型

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

  • 丶低调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

    详情解说,看图。

  • 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来实现的
        };
      }

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

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

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

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

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

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

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

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

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

    赞赞!