为了账号安全,请及时绑定邮箱和手机立即绑定

对象 原型链 部分存疑

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

正在回答

4 回答

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

0 回复 有任何疑惑可以回复我~

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

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

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


0 回复 有任何疑惑可以回复我~

 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 只是存在对象上

4 回复 有任何疑惑可以回复我~

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

4 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript深入浅出
  • 参与学习       281119    人
  • 解答问题       1020    个

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

进入课程

对象 原型链 部分存疑

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信