问答详情
源自:4-2 [JavaScript]创建对象、原型链

对象 原型链 部分存疑

var obj=Object.create({x:2}); typeof obj.toString(); 为什么我得到的是“string”??? 还有用new 和create创建出来的对象为什么hasOwnProperty()返回的会不同呢

提问者:记忆流年0 2018-03-22 10:45

个回答

  • qq_慕慕947699
    2019-10-18 16:45:32

    当用构造函数或对象字面量方法创建空对象时,对象时有原型属性的,即有_proto_;
    当用Object.create()方法创建空对象时,对象是没有原型属性的。

  • qq_慕慕947699
    2019-10-18 16:44:35

    new Object()通过构造函数创建对象,添加的属性是在自身实例下面;

    Object.create 可以理解为继承一个对象,添加的属性在原型下面;

    Object.create() 用第二个参数来创建非空对象的属性描述符默认是为false的,而构造函数或字面量方法创建的对象属性的描述符默认为true(可修改,可枚举,可写入)。


  • qq__3276
    2018-05-25 22:48:04

     1. obj.toString() 意思是调用obj原型上的toString函数,调用toString方法返回的是一个字符串,所以typeof obj.toString() 是string   
    而  obj.toString 只是显示object.prototype的toString函数,不会去调用.

    2. Object.create创建的对象属性会存在对象的原型里面,
    如var obj = Object.create({x:1}),相当于var obj = {}; obj.prototype.x = 1;

    而new 只是存在对象上

  • qq_十_1
    2018-03-23 10:51:16

    1、你用的是toString() 会被转换成一个字符串 "[object Object]"。
    2、new创建的属性还是属于字面量的对象属性,
          create创建的属性是属于原型里的属性了,
          hasOwnProperty(“key”)  只能识别字面量的属性,原型里的属性都会返回false