字面量创建对象和new创建对象

1、字面量创建对象

 <script>

var obj1 = {
       name: '大大大'
   }

    console.log(obj1)

  </script>

在这里插入图片描述

2、new创建对象

  <script>

var obj = new Object();
    obj.name = '小小小';
    console.log(obj)

  </script>

在这里插入图片描述

3、new内部都实现了什么:

  • 创建一个新对象
  • 使新对象的__proto__指向原函数的prototype
  • 改变this指向(指向新的obj)并执行该函数,执行结果保存起来作为result
  • 判断执行函数的结果是不是null或Undefined,如果是则返回之前的新对象,如果不是则返回result

如下:手写一个new:

    // 手写一个new
    function myNew(fn, ...args) {
      // 创建一个空对象
      let obj = {}
      // 使空对象的隐式原型指向原函数的显式原型
      obj.__proto__ = fn.prototype
      // this指向obj
      let result = fn.apply(obj, args)
      // 返回
      return result instanceof Object ? result : obj
    }

4、字面量的好处是:

  • 可读性,可维护性好,更加体现了封装性。
  • 性能略好,js引擎不用解析作用域,因为不用担心出现同名构造函数Object()。
  • 其实这种方式是没有调用Object()构造函数的,js引擎会帮你先创建一个空对象,然后改变this指向你创建的对象即可。
  • 若函数有大量参数,推荐使用对象字面量传参,也就是直接传一个对象作为参数。这样不仅不用担心参数是否必需,而且也省去了参数顺序的麻烦。

5、补充:字面量new出来的对象和 Object.create(null)创建出来的对象有什么区别?

  • 字面量和new创建出来的对象会继承Object的方法和属性,他们的隐式原型会指向Object的显式原型,
  • 而 Object.create(null)创建出来的对象原型为null,作为原型链的顶端,自然也没有继承Object的方法和属性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值