var obj=Object.create({x:2}); typeof obj.toString(); 为什么我得到的是“string”??? 还有用new 和create创建出来的对象为什么hasOwnProperty()返回的会不同呢
当用构造函数或对象字面量方法创建空对象时,对象时有原型属性的,即有_proto_
;
当用Object.create()方法创建空对象时,对象是没有原型属性的。
new Object()通过构造函数创建对象,添加的属性是在自身实例下面;
Object.create 可以理解为继承一个对象,添加的属性在原型下面;
Object.create() 用第二个参数来创建非空对象的属性描述符默认是为false的,而构造函数或字面量方法创建的对象属性的描述符默认为true(可修改,可枚举,可写入)。
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 只是存在对象上
1、你用的是toString() 会被转换成一个字符串 "[object Object]"。
2、new创建的属性还是属于字面量的对象属性,
create创建的属性是属于原型里的属性了,
hasOwnProperty(“key”) 只能识别字面量的属性,原型里的属性都会返回false