字面量、new操作符 和Object.create(null)创建出来的对象的区别

字面量创建好处

  • 字面量创建对象更简单,方便阅读;
  • 不需要作用域解析,速度更快。

new内部

  • 创建一个空对象;
  • 使新对象的__proto__指向原函数的prototype;
  • 改变this指向(指向新的obj)并执行该函数,执行结果保存起来作为result;
  • 判断执行函数的结果是否是Null/Undefined,如果是,则返回之前的新对象,否则返回result。
function myNew(fn, ...args) {
  // 创建一个空对象
  let obj = {};
  // 使空对象的隐式原型指向原函数的显式原型
  obj.__proto__ = fn.prototype;
  // this指向obj
  let result = fn.apply(obj, args);//相当于obj.fn(args)
  // 返回
  return result instanceof Object ? result : obj;
}

字面量和new创建出来的对象与Object.create(null)创建出来的对象的区别

  • 字面量和new创建出来的对象会继承Object的方法和属性,创建出来的对象的隐式原型(proto)会指向Object的显示原型;
  • 而Object.create(null)创建出来的对象原型为null,作为原型链的顶端,就没有继承Object的方法和属性。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值