new和Object.create的区别

new和Object.create的区别

MDN上的描述

今天在看JS中类的继承时,发现这两个东西有点意思,之前一直没有用过Object.create()。于是乎打开了MDN,查了一下。在MDN上给Object.create()的描述是这样的:

  • Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。

  • 语法: Object.create(proto,[propertiesObject])

    • proto:新创建对象的原型对象
    • propertiesObject:可选。需要传入一个对象,该对象的属性类型参照Object.defineProperties()的第二个参数。如果该参数被指定且不为 undefined,该传入对象的自有可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)将为新创建的对象添加指定的属性值和对应的属性描述符。
    • 返回一个新对象,带着指定的原型对象和属性。

二者的区别

  • 在MDN上的例子中有这么一段:
function Constructor(){}
o = new Constructor();
// 上面的一句就相当于:
o = Object.create(Constructor.prototype);
// 当然,如果在Constructor函数中有一些初始化代码,Object.create不能执行那些代码
  • 这么看起来就很清晰了,使用Object.create(proto)创建一个对象,即是以proto为原型对象创建一个新的对象。
  • 它们的区别在于,如果Constructor()这个构造函数中有传值,则使用new关键字可以执行其中的逻辑,但是使用Object.create()则不能执行。
  • 也正因为Object.create()不能执行构造函数,它常被用于在ES5下实现类的继承。它不会让构造函数被执行两次,造成性能不必要的浪费。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值